We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在Linux中,许多系统调用在信号到来时,会返回-ERESTARTSYS或者-EINTR,以便返回用户态处理信号。而目前DragonOS的许多系统调用没有正确处理这个问题,这就会导致某些进程kill不掉,或者是定时到了之后没能返回用户态。
-ERESTARTSYS
-EINTR
分两步进行完善修复:
这类系统调用在Linux中的重要特征是,会在被唤醒时,调用signal_pending()函数来检查当前进程是否有要处理的信号。
signal_pending()
因此,可以在code.dragonos.org.cn里面,搜索refs:signal_pending。如果想搜网络的系统调用,那么就在path那一栏再添加一个net即可。
refs:signal_pending
net
例子: https://code.dragonos.org.cn/search?project=linux-6.6.21&full=ERESTARTSYS&defs=&refs=&path=net+-drivers&hist=&type=&xrd=&nn=1&si=path&si=path&n=25
欢迎在本issue下面补充,我会把它更新到这里~
read
The text was updated successfully, but these errors were encountered:
test_sigint
No branches or pull requests
描述
在Linux中,许多系统调用在信号到来时,会返回
-ERESTARTSYS
或者-EINTR
,以便返回用户态处理信号。而目前DragonOS的许多系统调用没有正确处理这个问题,这就会导致某些进程kill不掉,或者是定时到了之后没能返回用户态。期望
分两步进行完善修复:
-EINTR
。由用户程序去处理系统调用的重启。如何查找这些系统调用?
这类系统调用在Linux中的重要特征是,会在被唤醒时,调用
signal_pending()
函数来检查当前进程是否有要处理的信号。因此,可以在code.dragonos.org.cn里面,搜索
refs:signal_pending
。如果想搜网络的系统调用,那么就在path那一栏再添加一个net
即可。例子: https://code.dragonos.org.cn/search?project=linux-6.6.21&full=ERESTARTSYS&defs=&refs=&path=net+-drivers&hist=&type=&xrd=&nn=1&si=path&si=path&n=25
可能存在问题的系统调用
欢迎在本issue下面补充,我会把它更新到这里~
-ERESTARTSYS
,并在外层替换为-EINTR
。否则,如果connect一直在进行的话,kill不掉这个进程。read
方法read
方法read
方法The text was updated successfully, but these errors were encountered: