- 论坛徽章:
- 0
|
sipt_resp_thread( void *myarg )是个线程执行函数,正常启动是没问题,因为sem_wait( &respset->;nresp)阻塞住, 但如果用gdb调试,这时sem_wait( &respset->;nresp)就常被信号中断,perror()输出如下:sem_wait() fail: : Interrupted system call。于是代码就绕过2个sem_wait()继续往下走,造成segmentation fault. 并且被信号中断在程序中也时常出现sem_wait() fail: : Interrupted system call。请问这个问题怎么解决呢? 我如果判断errno不为0时或更具体点当errno为某个我们需要的值时加个continue语句能行吗?
sipt_resp_thread( void *myarg )
{
sigaddset( &respset->;maskset , SIGALRM );
if ( sigprocmask( SIG_BLOCK , &respset->;maskset , &respset->;maskoset ) < 0)
{
if( errno )
{
perror( "SIG_BLOCK error : " );
errno = 0;
}
}
while(1)
{
sem_wait( &respset->;nresp);
sem_wait( &respset->;mutex );
if( errno )
{
perror( "sem_wait() fail: " );
errno = 0;
continue; //added
}
......
//other codes
}
} |
|