remove debugging printf
[ust.git] / ustd / ustd.c
index c1dd0cb83d87c2ffd451b4860d70fdd66c985f10..8a1f4d60c2df6397cbccdd5af6d5b54a8849023f 100644 (file)
@@ -549,9 +549,33 @@ void *consumer_thread(void *arg)
 {
        struct buffer_info *buf = (struct buffer_info *) arg;
        struct consumer_thread_args *args = (struct consumer_thread_args *) arg;
+       int result;
+       sigset_t sigset;
 
        DBG("GOT ARGS: pid %d bufname %s", args->pid, args->bufname);
 
+       /* Block signals that should be handled by the main thread. */
+       result = sigemptyset(&sigset);
+       if(result == -1) {
+               PERROR("sigemptyset");
+               goto end;
+       }
+       result = sigaddset(&sigset, SIGTERM);
+       if(result == -1) {
+               PERROR("sigaddset");
+               goto end;
+       }
+       result = sigaddset(&sigset, SIGINT);
+       if(result == -1) {
+               PERROR("sigaddset");
+               goto end;
+       }
+       result = sigprocmask(SIG_BLOCK, &sigset, NULL);
+       if(result == -1) {
+               PERROR("sigprocmask");
+               goto end;
+       }
+
        buf = connect_buffer(args->pid, args->bufname);
        if(buf == NULL) {
                ERR("failed to connect to buffer");
@@ -560,10 +584,10 @@ void *consumer_thread(void *arg)
 
        consumer_loop(buf);
 
-       free((void *)args->bufname);
        destroy_buffer(buf);
 
        end:
+       free((void *)args->bufname);
        free(args);
        return NULL;
 }
@@ -693,6 +717,7 @@ int start_ustd(int fd)
        int result;
        sigset_t sigset;
        struct sigaction sa;
+       int timeout = -1;
 
        result = sigemptyset(&sigset);
        if(result == -1) {
@@ -701,7 +726,7 @@ int start_ustd(int fd)
        }
        sa.sa_handler = sigterm_handler;
        sa.sa_mask = sigset;
-       sa.sa_flags = SA_RESTART;
+       sa.sa_flags = 0;
        result = sigaction(SIGTERM, &sa, NULL);
        if(result == -1) {
                PERROR("sigaction");
@@ -768,12 +793,15 @@ int start_ustd(int fd)
                char *recvbuf;
 
                /* check for requests on our public socket */
-               result = ustcomm_ustd_recv_message(&ustd, &recvbuf, NULL, 100);
-               if(result == -1) {
+               result = ustcomm_ustd_recv_message(&ustd, &recvbuf, NULL, timeout);
+               if(result == -1 && errno == EINTR) {
+                       /* Caught signal */
+               }
+               else if(result == -1) {
                        ERR("error in ustcomm_ustd_recv_message");
                        goto loop_end;
                }
-               if(result > 0) {
+               else if(result > 0) {
                        if(!strncmp(recvbuf, "collect", 7)) {
                                pid_t pid;
                                char *bufname;
@@ -810,6 +838,7 @@ int start_ustd(int fd)
                                break;
                        }
                        pthread_mutex_unlock(&active_buffers_mutex);
+                       timeout = 100;
                }
        }
 
This page took 0.024058 seconds and 4 git commands to generate.