提交 a1845865 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

deallocate procs via rcu

上级 491933fa
...@@ -66,7 +66,8 @@ allocproc(void) ...@@ -66,7 +66,8 @@ allocproc(void)
// Allocate kernel stack if possible. // Allocate kernel stack if possible.
if((p->kstack = kalloc()) == 0){ if((p->kstack = kalloc()) == 0){
kmfree(p); ns_remove(nspid, p->pid);
rcu_delayed(p, kmfree);
return 0; return 0;
} }
sp = p->kstack + KSTACKSIZE; sp = p->kstack + KSTACKSIZE;
...@@ -281,7 +282,8 @@ fork(int flags) ...@@ -281,7 +282,8 @@ fork(int flags)
kfree(np->kstack); kfree(np->kstack);
np->kstack = 0; np->kstack = 0;
np->state = UNUSED; np->state = UNUSED;
kmfree(np); ns_remove(nspid, np->pid);
rcu_delayed(np, kmfree);
return -1; return -1;
} }
} else { } else {
...@@ -397,7 +399,7 @@ wait(void) ...@@ -397,7 +399,7 @@ wait(void)
p->parent = 0; p->parent = 0;
p->name[0] = 0; p->name[0] = 0;
p->killed = 0; p->killed = 0;
kmfree(p); rcu_delayed(p, kmfree);
return pid; return pid;
} }
release(&p->lock); release(&p->lock);
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论