- 论坛徽章:
- 0
|
30可用积分
以下讨论假设系统中暂时无TASK_STOPPED的进程 。
SMP中,thread_group中两个task分别为A,B。
B通过sys_fork产生子进程C,且子进程C已经sys_exit,为TASK_ZOMBIE。
A运行在CPUA上,执行系统调用sys_wait4( C的pid,null, null, null )。
B运行在CPUB上,执行系统调用sys_wait4( C的pid,null, __WNOTHREAD, null )。
那么情形如下:
1)CPUA在tasklist_lock中,遍历A的子进程未果,于是继续遍历B的子进程,得C,然后释放tasklist_lock,( 这里2并发),再然后释放C。
2)由于CPUA已经释放tasklist_lock,故CPUB在tasklist_lock中,遍历B的子进程,得C,然后释放tasklist_lock,再然后释放C。
这样,C被释放了两次?????? |
最佳答案
查看完整内容
hi, 你说的是一个kernel的一个bug, 以前有人报告过。 http://lkml.org/lkml/2001/11/6/138 这些小bug的report总是被遗漏,所以好几个版本之后才被修正~~
|