提交 db4ad0cd 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

possible fixes

上级 be63c0b8
......@@ -239,11 +239,14 @@ fork(int flags)
np->ofile[i] = filedup(proc->ofile[i]);
np->cwd = idup(proc->cwd);
SLIST_INSERT_HEAD(&proc->childq, np, child_next); // XXX lock?
pid = np->pid;
addrun(np);
safestrcpy(np->name, proc->name, sizeof(proc->name));
acquire(&proc->lock);
SLIST_INSERT_HEAD(&proc->childq, np, child_next);
release(&proc->lock);
return pid;
}
......@@ -279,18 +282,21 @@ exit(void)
if(p->state == ZOMBIE)
wakeupinit = 1;
SLIST_REMOVE(&proc->childq, p, proc, child_next);
SLIST_INSERT_HEAD(&initproc->childq, p, child_next); // XXX lock?
release(&p->lock);
acquire(&initproc->lock);
SLIST_INSERT_HEAD(&initproc->childq, p, child_next);
release(&initproc->lock);
}
// Parent might be sleeping in wait().
acquire(&proc->lock);
cv_wakeup(&proc->parent->cv);
if (wakeupinit)
cv_wakeup(&initproc->cv);
acquire(&proc->lock);
// Jump into the scheduler, never to return.
proc->state = ZOMBIE;
sched();
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论