提交 1133b215 创建 作者: rsc's avatar rsc

more defensive programming

上级 f7017212
...@@ -371,7 +371,9 @@ proc_wait(void) ...@@ -371,7 +371,9 @@ proc_wait(void)
havekids = 0; havekids = 0;
for(i = 0; i < NPROC; i++){ for(i = 0; i < NPROC; i++){
p = &proc[i]; p = &proc[i];
if(p->state != UNUSED && p->ppid == cp->pid){ if(p->state == UNUSED)
continue;
if(p->ppid == cp->pid){
if(p->state == ZOMBIE){ if(p->state == ZOMBIE){
// Found one. // Found one.
kfree(p->mem, p->sz); kfree(p->mem, p->sz);
...@@ -379,6 +381,7 @@ proc_wait(void) ...@@ -379,6 +381,7 @@ proc_wait(void)
pid = p->pid; pid = p->pid;
p->state = UNUSED; p->state = UNUSED;
p->pid = 0; p->pid = 0;
p->ppid = 0;
release(&proc_table_lock); release(&proc_table_lock);
return pid; return pid;
} }
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论