summaryrefslogtreecommitdiff
path: root/proc.c
diff options
context:
space:
mode:
Diffstat (limited to 'proc.c')
-rw-r--r--proc.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/proc.c b/proc.c
index bcdbfea..e19539c 100644
--- a/proc.c
+++ b/proc.c
@@ -153,10 +153,16 @@ fork(void)
if(proc->ofile[i])
np->ofile[i] = filedup(proc->ofile[i]);
np->cwd = idup(proc->cwd);
+
+ safestrcpy(np->name, proc->name, sizeof(proc->name));
pid = np->pid;
+
+ // lock to force the compiler to emit the np->state write last.
+ acquire(&ptable.lock);
np->state = RUNNABLE;
- safestrcpy(np->name, proc->name, sizeof(proc->name));
+ release(&ptable.lock);
+
return pid;
}
@@ -455,5 +461,3 @@ procdump(void)
cprintf("\n");
}
}
-
-