Ignore first SIGINT
[lttng-tools.git] / kconsumerd / kconsumerd.c
index fcd4101a62d0bdbdff1b7ffcd34a86365324afbf..adc1f1beddeb79b68796258289cea9edf2e532e1 100644 (file)
@@ -67,6 +67,9 @@ static int poll_pipe[2];
 /* socket to communicate errors with sessiond */
 static int error_socket = -1;
 
+/* to count the number of time the user pressed ctrl+c */
+static int sigintcount = 0;
+
 /* Argument variables */
 int opt_quiet;
 int opt_verbose;
@@ -156,7 +159,7 @@ static int add_fd(struct lttcomm_kconsumerd_msg *buf, int consumerd_fd)
        /* Opening the tracefile in write mode */
        DBG("Opening %s for writing", tmp_fd->path_name);
        ret = open(tmp_fd->path_name,
-                       O_WRONLY|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO);
+                       O_WRONLY|O_CREAT|O_TRUNC, S_IRWXU|S_IRWXG|S_IRWXO);
        if (ret < 0) {
                ERR("Opening %s", tmp_fd->path_name);
                perror("open");
@@ -185,6 +188,11 @@ end:
  */
 static void sighandler(int sig)
 {
+       if (sig == SIGINT && sigintcount++ == 0) {
+               DBG("ignoring first SIGINT");
+               return;
+       }
+
        cleanup();
 
        return;
@@ -519,7 +527,7 @@ static void *thread_receive_fds(void *data)
        /* Blocking call, waiting for transmission */
        sock = lttcomm_accept_unix_sock(client_socket);
        if (sock <= 0) {
-               WARN("On accept, retrying");
+               WARN("On accept");
                goto error;
        }
        while (1) {
@@ -555,29 +563,6 @@ static int update_poll_array(struct pollfd **pollfd,
        struct ltt_kconsumerd_fd *iter;
        int i = 0;
 
-       if (*pollfd != NULL) {
-               free(*pollfd);
-               *pollfd = NULL;
-       }
-
-       if (*local_kconsumerd_fd != NULL) {
-               free(*local_kconsumerd_fd);
-               *local_kconsumerd_fd = NULL;
-       }
-
-       /* allocate for all fds + 1 for the poll_pipe */
-       *pollfd = malloc((fds_count + 1) * sizeof(struct pollfd));
-       if (*pollfd == NULL) {
-               perror("pollfd malloc");
-               goto error_mem;
-       }
-
-       /* allocate for all fds + 1 for the poll_pipe */
-       *local_kconsumerd_fd = malloc((fds_count + 1) * sizeof(struct ltt_kconsumerd_fd));
-       if (*local_kconsumerd_fd == NULL) {
-               perror("local_kconsumerd_fd malloc");
-               goto error_mem;
-       }
 
        DBG("Updating poll fd array");
        pthread_mutex_lock(&kconsumerd_lock_fds);
@@ -605,8 +590,6 @@ static int update_poll_array(struct pollfd **pollfd,
        pthread_mutex_unlock(&kconsumerd_lock_fds);
        return i;
 
-error_mem:
-       return -ENOMEM;
 }
 
 /*
@@ -643,6 +626,27 @@ static void *thread_poll_fds(void *data)
                 * local array as well
                 */
                if (update_fd_array) {
+                       if (pollfd != NULL) {
+                               free(pollfd);
+                               pollfd = NULL;
+                       }
+                       if (local_kconsumerd_fd != NULL) {
+                               free(local_kconsumerd_fd);
+                               local_kconsumerd_fd = NULL;
+                       }
+                       /* allocate for all fds + 1 for the poll_pipe */
+                       pollfd = malloc((fds_count + 1) * sizeof(struct pollfd));
+                       if (pollfd == NULL) {
+                               perror("pollfd malloc");
+                               goto end;
+                       }
+                       /* allocate for all fds + 1 for the poll_pipe */
+                       local_kconsumerd_fd = malloc((fds_count + 1) * sizeof(struct ltt_kconsumerd_fd));
+                       if (local_kconsumerd_fd == NULL) {
+                               perror("local_kconsumerd_fd malloc");
+                               goto end;
+                       }
+
                        ret = update_poll_array(&pollfd, local_kconsumerd_fd);
                        if (ret < 0) {
                                ERR("Error in allocating pollfd or local_outfds");
This page took 0.024739 seconds and 4 git commands to generate.