diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/proc.c | 16 | 
1 files changed, 5 insertions, 11 deletions
| diff --git a/kernel/proc.c b/kernel/proc.c index 9202b61..1201c8b 100644 --- a/kernel/proc.c +++ b/kernel/proc.c @@ -529,19 +529,13 @@ sleep(void *chan, struct spinlock *lk)  }  //PAGEBREAK! -// Wake up all processes sleeping on chan, -// where chan is a proc, which is locked. +// Wake up locked parent, used by exit()  static void -wakeup1(struct proc *chan) +wakeup1(struct proc *p)  { -  struct proc *p; - -  for(p = ptable.proc; p < &ptable.proc[NPROC]; p++) -    if(p == chan && p->state == SLEEPING && p->chan == chan) { -      if(p->state != SLEEPING || p->chan != chan) -        panic("wakeup1"); -      p->state = RUNNABLE; -    } +  if(p->chan == p && p->state == SLEEPING) { +    p->state = RUNNABLE; +  }  }  // Wake up all processes sleeping on chan. Never | 
