[zeromq-dev] ZMQ, CZMQ, threads and signal handlers

Claudio Carbone erupter at libero.it
Mon Jan 7 11:49:12 CET 2013


Hello.

I've been getting more and more confused by the CZMQ recent threads 
about signal handling.
In my programs I usually install a signal handler at the beginning like so

static void s_signal_handler (int signal_value)
{
     if (signal_value == SIGTERM || signal_value == SIGSTOP || 
signal_value == SIGINT)
         s_interrupted = 1;
     if (signal_value == SIGALRM)
         alarm_expired = 1;
     if (signal_value == SIGTSTP)
     {
         printf("SIGTSTP received\n");
     }
}

static void s_catch_signals (void)
{
     struct sigaction action;
     action.sa_handler = s_signal_handler;
     action.sa_flags = 0;
     sigemptyset (&action.sa_mask);
     sigaction (SIGINT, &action, NULL);
     sigaction (SIGTERM, &action, NULL);
     sigaction (SIGALRM, &action, NULL);
     sigaction (SIGSTOP, &action, NULL);
     sigaction (SIGTSTP, &action, NULL);
}

int main (void){
     s_catch_signals();
     while(s_interrupted==0);
     return;
}

I don't make use of CZMQ, I use ZMQ and zhelpers.h but I notice that 
sometimes my signal handler is ignored and a ZMQ one catches the signal.

I've also been incurring in thread problems without ever creating 
threads in my program.
I've been doing tests with clients and servers inside the same main, 
where I create a single context and the necessary socket and then start 
the messaging pattern: in these cases the standard output (cout or 
printf) is often absent unless I start with gdb, but then stepping 
doesn't go straight, rather it jumps as if there were multiple threads 
executing the same code.
Why is this happening?

Regards and thanks
Claudio



More information about the zeromq-dev mailing list