DragonOS icon indicating copy to clipboard operation
DragonOS copied to clipboard

[BUG REPORT] 等待任意子进程退出时,发生死锁问题

Open fslongjin opened this issue 1 year ago • 1 comments

描述错误 父进程调用sys_wait等待任意子进程退出时,如果释放了子进程的pid,那么会产生死锁

请填写您的电脑的信息:

相关信息 https://bbs.dragonos.org.cn/t/topic/399/5

原因分析

下图154行获取了当前进程的children字段的读锁。 img_v3_02gh_175bdf04-1a10-488a-8c06-8b4c91f859dg

然后当162行释放pid时。如果子进程的parent是当前进程,并且子进程的pcb没有被其他地方再引用,那么就会调用子进程pcb的Drop方法.此时会尝试获取父进程的children字段的写锁,从而导致死锁。 KkxzrDeSEi

可能的解决方案

  • 延迟pcb被drop的时机(通过在do_wait这里存储多一个Arc指针,等children的读锁释放后,再drop掉指针。)
  • 异步删除?建立通知机制,异步的从父进程的children字段里面删掉对应的pcb?

cc @val213 @sparkzky

fslongjin avatar Nov 10 '24 17:11 fslongjin

我正在修复关于sys_wait4的问题

fslongjin avatar Nov 30 '24 14:11 fslongjin