Hack for mon_bin_run()
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 19 Nov 2013 21:50:16 +0000 (13:50 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jan 2014 19:48:31 +0000 (11:48 -0800)
This only matters when you run bin_run (or bb) while another process is
current on the core.  Say you lock up a process and want to get another
shell, prior to this the new shell would inherit certain things from the
active process, due to assumptions in the create paths about the
relationship between the parent and current.

kern/src/monitor.c

index 01b7c99..a836abc 100644 (file)
@@ -305,7 +305,12 @@ int mon_bin_run(int argc, char **argv, struct hw_trapframe *hw_tf)
                p_argv[i] = argv[i + 1];
        p_argv[argc - 1] = 0;
        char *p_envp[] = {"LD_LIBRARY_PATH=/lib", 0};
+       /* super ugly: we need to stash current, so that proc_create doesn't pick up
+        * on random processes running here and assuming they are the parent */
+       struct proc *old_cur = current;
+       current = 0;
        struct proc *p = proc_create(program, p_argv, p_envp);
+       current = old_cur;
        kfree(p_argv);
        proc_wakeup(p);
        proc_decref(p); /* let go of the reference created in proc_create() */