丢失了通过F_SETLEASE租赁给单个租赁持有人的多个文件的实时信号

问题描述 投票:0回答:1

如何为持有多个文件租约的单个进程设置可靠的租约中断实时信号通知?

这里是上下文和问题:

  • 使用fcntl(fd,F_GETLEASE,...)获取文件租约时用文件描述符fd打开,可以指定一个实时信号,比如说fcntl(fd,F_SETSIG,SIGRTMIN + 6),要交付给租赁租约破坏者打开或截断文件时的所有者。

  • Linux文档说实时信号由核心。因此,人们希望SIGRTMIN + 6能够在多个租用破坏者分别向同一个租用者发送信号。

  • 在我的实验中,如果租赁持有人持有租赁,则的确如此。对于单个文件描述符,即使有时是租赁持有人阻止,然后取消阻止SIGRTMIN + 6。但是,如果它持有多个文件fd1,fd2,...,有时还会阻止和取消阻止SIGRTMIN + 6,然后从破坏某些fdK的SIGRTMIN + 6永远不会已交付。

linux file signal-processing blocking
1个回答
0
投票

我仍然不知道这个问题的答案。另一个线索是,在压力测试期间,OS内核(Intel的Ubuntu 16.4)在内核租约处理代码的深处记录了一个内部断言失败。这似乎表明信号处理可能存在内部OS问题,同时在租约中断期间阻止了信号。

但是,可以通过重新设计应用程序的方式将需要保护以免被SIGRTMIN + 6中断的代码移到另一个进程中。剩下的程序,现在再也不会尝试阻止SIGRTMIN + 6了,它运行良好-它的信号处理程序可以捕获来自信号断路器的所有信号。

© www.soinside.com 2019 - 2024. All rights reserved.