diff --git a/kernel/proc.c b/kernel/proc.c index bd39c4b..edb6001 100644 --- a/kernel/proc.c +++ b/kernel/proc.c @@ -319,13 +319,12 @@ void exit(void) { struct proc *p = myproc(); - int fd; if(p == initproc) panic("init exiting"); // Close all open files. - for(fd = 0; fd < NOFILE; fd++){ + for(int fd = 0; fd < NOFILE; fd++){ if(p->ofile[fd]){ struct file *f = p->ofile[fd]; fileclose(f); @@ -342,14 +341,14 @@ exit(void) acquire(&p->lock); - // Give our children to init. + // Give any children to init. reparent(p, p->parent); - p->state = ZOMBIE; - // Parent might be sleeping in wait(). wakeup1(p->parent); + p->state = ZOMBIE; + release(&p->parent->lock); // Jump into the scheduler, never to return.