X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=ustd%2Fustd.c;h=ce6f7e211ea67acffa4cc45c24c6c1dc5b5ecb07;hb=f05eefd81e6ddc4911529b2c3a754aa68e713ca7;hp=c1dd0cb83d87c2ffd451b4860d70fdd66c985f10;hpb=7a9b5b6903821f529d6db1a89cda3d933352cde6;p=ust.git diff --git a/ustd/ustd.c b/ustd/ustd.c index c1dd0cb..ce6f7e2 100644 --- a/ustd/ustd.c +++ b/ustd/ustd.c @@ -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"); @@ -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,16 @@ 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 */ + printf("Caught signal\n"); + } + 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 +839,7 @@ int start_ustd(int fd) break; } pthread_mutex_unlock(&active_buffers_mutex); + timeout = 100; } }