Re-add next locking

上级 9eb5f138
......@@ -94,6 +94,7 @@ void cv_sleepto(struct condvar *cv, struct spinlock *lk, u64 timeout)
release(&cv->lock);
sched();
release(&myproc()->lock);
// Reacquire original lock.
acquire(lk);
......
......@@ -37,6 +37,7 @@ idleloop(void)
struct proc *p = schednext();
if (p) {
acquire(&p->lock);
if (get_proc_state(p) != RUNNABLE) {
panic("Huh?");
} else {
......
......@@ -64,6 +64,7 @@ yield(void)
acquire(&myproc()->lock); //DOC: yieldlock
set_proc_state(myproc(), RUNNABLE);
sched();
release(&myproc()->lock);
}
......@@ -72,6 +73,7 @@ yield(void)
void
forkret(void)
{
release(&myproc()->lock);
// Just for the first process. can't do it earlier
// b/c file system code needs a process context
// in which to call cv_sleep().
......@@ -498,6 +500,7 @@ wait(void)
void
threadhelper(void (*fn)(void *), void *arg)
{
release(&myproc()->lock);
mtstart(fn, myproc());
fn(arg);
exit();
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论