从sigtimedwait函数接收SIGABRT

时间:2019-01-21 09:52:08

标签: linux multithreading debian signals

我在sigtimedwait()时崩溃,一旦在无限长的线程函数中运行下面所述的代码块时发生了一次。在我的应用程序中使用sigtimedwait在debian 9.3上运行以查找SIGUSR1信号,这就是我的方式正在使用它。

my_fun()
{
sigset_t set;
struct timespec tm;
siginfo_t info;
sigemptyset(&set);
sigaddset(&set, SIGUSR1);
int s  = pthread_sigmask(SIG_BLOCK, &set, NULL);
if (0 != s)
{
    raise(SIGABRT);
}

tm.tv_sec = 1;
tm.tv_nsec = 0;

for (;;){
if (SIGUSR1 == sigtimedwait(&set, &info, &tm)) --> Line 1077
{
}
} //end of for(infinite loop)
}
<My_filename.cpp>

我的应用程序在第1077行崩溃,回溯显示如下:

[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/local/bin/nelrtuapp_lan'.
Program terminated with signal SIGABRT, Aborted.
#0  0x00007fe781b32d9c in __GI___sigtimedwait (set=<optimized out>,   
info=0x7ffe52a6c240, timeout=0x7ffe52a6c2c0) at ../sysdeps/unix/sysv/linux                   
/sigtimedwait.c:54
54      ../sysdeps/unix/sysv/linux/sigtimedwait.c: No such file or directory.
[Current thread is 1 (Thread 0x7fe782d74740 (LWP 7096))]

(gdb) bt
 #0  0x00007fe781b32d9c in __GI___sigtimedwait (set=<optimized out>,     
 info=0x7ffe52a6c240, timeout=0x7ffe52a6c2c0) at ../sysdeps/unix/sysv/linux  
 /sigtimedwait.c:54
 #1  0x0000555d6d53d659 in my_fun() at My_filename.cpp:1077

我正在尝试搜索源代码,以进一步了解sigtimedwait.c的__GI___sigtimedwait函数,找不到具有相同功能且期望SIGABRT提高的文件很幸运。我经常在GITHUB的code.woboq中进入以下文件。

https://searchcode.com/codesearch/view/10496366/

对此,任何指针或线索将不胜感激。

1 个答案:

答案 0 :(得分:0)

我建议您初始化struct timespec tm;,重新编译并再次运行。