diff options
author | rsc <rsc> | 2007-08-08 08:57:37 +0000 |
---|---|---|
committer | rsc <rsc> | 2007-08-08 08:57:37 +0000 |
commit | 00d0f794cfd7a1df3b73f28028c8768bae3fef09 (patch) | |
tree | 2b955fe2559c1a26b1ce7afec43fb6695dd852f6 /proc.c | |
parent | bda5186c0d6baee0f45b543513ffb0f629c9f348 (diff) | |
download | xv6-labs-00d0f794cfd7a1df3b73f28028c8768bae3fef09.tar.gz xv6-labs-00d0f794cfd7a1df3b73f28028c8768bae3fef09.tar.bz2 xv6-labs-00d0f794cfd7a1df3b73f28028c8768bae3fef09.zip |
fix various bugs
Diffstat (limited to 'proc.c')
-rw-r--r-- | proc.c | 11 |
1 files changed, 9 insertions, 2 deletions
@@ -207,8 +207,10 @@ sched(void) { struct proc *p = curproc[cpu()]; + if(p->state == RUNNING) + panic("sched running"); if(!holding(&proc_table_lock)) - panic("sched"); + panic("sched proc_table_lock"); if(cpus[cpu()].nlock != 1) panic("sched locks"); @@ -334,6 +336,9 @@ proc_exit(void) struct proc *cp = curproc[cpu()]; int fd; + if(cp->pid == 1) + panic("init exiting"); + // Close all open files. for(fd = 0; fd < NOFILE; fd++){ if(cp->ofile[fd]){ @@ -354,8 +359,10 @@ proc_exit(void) // Reparent our children to process 1. for(p = proc; p < &proc[NPROC]; p++) - if(p->ppid == cp->pid) + if(p->ppid == cp->pid){ p->ppid = 1; + wakeup1(&proc[1]); // init + } // Jump into the scheduler, never to return. cp->killed = 0; |