Fix kconsumerd thread on message error received
[lttng-tools.git] / ltt-sessiond / main.c
index 9fd5c1c75f2684489713d5c83131ad8a406f85cb..1c9c0dd4771af49ea039f5183f46b9dd9f6f1d4b 100644 (file)
@@ -390,22 +390,28 @@ static void *thread_manage_kconsumerd(void *data)
                sem_post(&kconsumerd_sem);
                DBG("Kconsumerd command socket ready");
        } else {
-               DBG("[sessiond] Kconsumerd error when waiting for SOCK_READY : %s",
+               DBG("Kconsumerd error when waiting for SOCK_READY : %s",
                                lttcomm_get_readable_code(-code));
                goto error;
        }
 
-       /* Wait for any kconsumerd error */
-       ret = lttcomm_recv_unix_sock(sock, &code, sizeof(enum lttcomm_return_code));
-       if (ret <= 0) {
-               ERR("[sessiond] Kconsumerd closed the command socket");
-               goto error;
-       }
+       while (1) {
+               /* Wait for any kconsumerd error */
+               ret = lttcomm_recv_unix_sock(sock, &code, sizeof(enum lttcomm_return_code));
+               if (ret <= 0) {
+                       ERR("Kconsumerd closed the command socket");
+                       goto error;
+               }
 
-       ERR("Kconsumerd return code : %s", lttcomm_get_readable_code(-code));
+               ERR("Kconsumerd return code : %s", lttcomm_get_readable_code(-code));
+               if (code != KCONSUMERD_POLL_HUP) {
+                       goto error;
+               }
+       }
 
 error:
        kconsumerd_pid = 0;
+       DBG("Kconsumerd thread dying");
        return NULL;
 }
 
@@ -569,6 +575,8 @@ static int start_kconsumerd(void)
        }
        pthread_mutex_unlock(&kconsumerd_pid_mutex);
 
+       DBG("Kconsumerd pid %d", ret);
+
        DBG("Spawning kconsumerd thread");
 
        ret = spawn_kconsumerd_thread();
@@ -892,6 +900,11 @@ static int process_client_msg(struct command_ctx *cmd_ctx)
                        goto setup_error;
                }
 
+               if (cmd_ctx->session->kernel_session == NULL) {
+                       ret = LTTCOMM_KERN_NO_SESSION;
+                       goto error;
+               }
+
                DBG("Stop kernel tracing");
 
                ret = kernel_stop_session(cmd_ctx->session->kernel_session);
This page took 0.026069 seconds and 5 git commands to generate.