DragonOS icon indicating copy to clipboard operation
DragonOS copied to clipboard

fix: pipe 读取/写入阻塞时,无法kill进程的问题

Open fslongjin opened this issue 1 year ago • 5 comments

修复了pipe等待的时候,没有处理信号,导致永远等待,kill不掉的问题

fslongjin avatar Aug 13 '24 11:08 fslongjin

麻烦看看~

r? @GnoCiYeH @dragonosbot review

fslongjin avatar Aug 13 '24 12:08 fslongjin

关联issue https://github.com/DragonOS-Community/DragonOS/issues/884

fslongjin avatar Aug 13 '24 12:08 fslongjin

只看了宏的部分,感觉如果可以有可变返回类型,可以直接做阻塞IO的调用返回。

没懂你意思

fslongjin avatar Aug 20 '24 10:08 fslongjin

只看了宏的部分,感觉如果可以有可变返回类型,可以直接做阻塞IO的调用返回。

没懂你意思

应该说,在这种设计下,可自行设计闭包,来在condition与cmd中共享cmd执行结果参数,从而实现阻塞io(根据结果为Err(EAGAIN)/Err(_)/Ok(result)来决定是继续阻塞轮询/返回错误/返回结果)

譬如smoltcp在判断can_recv后接着recv操作也不是保证一定能返回成功的,这时候似乎就要用闭包来共享结果到condition表达式中了?

另一方面,自己直接用wait_queue来实现io的阻塞,不符合封装,也容易造成这种没有处理interrupt信号的问题。

Samuka007 avatar Aug 20 '24 13:08 Samuka007

只看了宏的部分,感觉如果可以有可变返回类型,可以直接做阻塞IO的调用返回。

没懂你意思

应该说,在这种设计下,可自行设计闭包,来在condition与cmd中共享cmd执行结果参数,从而实现阻塞io(根据结果为Err(EAGAIN)/Err(_)/Ok(result)来决定是继续阻塞轮询/返回错误/返回结果)

譬如smoltcp在判断can_recv后接着recv操作也不是保证一定能返回成功的,这时候似乎就要用闭包来共享结果到condition表达式中了?

另一方面,自己直接用wait_queue来实现io的阻塞,不符合封装,也容易造成这种没有处理interrupt信号的问题。

你所说的内容,这个宏就能实现了。

fslongjin avatar Aug 21 '24 15:08 fslongjin