Fix: don't start session if no channel
[lttng-tools.git] / src / bin / lttng-sessiond / cmd.c
index 73ba7740fd131863172c53ae9e1cb558fe09f323..5bf00be8536f12cb124fd0d828486344b75734b7 100644 (file)
@@ -1461,7 +1461,7 @@ int cmd_enable_event(struct ltt_session *session, struct lttng_domain *domain,
 
                /* The wild card * means that everything should be enabled. */
                if (strncmp(event->name, "*", 1) == 0 && strlen(event->name) == 1) {
-                       ret = event_jul_enable_all(usess);
+                       ret = event_jul_enable_all(usess, event);
                } else {
                        ret = event_jul_enable(usess, event);
                }
@@ -1645,7 +1645,7 @@ int cmd_enable_event_all(struct ltt_session *session,
        }
        case LTTNG_DOMAIN_JUL:
        {
-               struct lttng_event uevent;
+               struct lttng_event uevent, event;
                struct lttng_domain tmp_dom;
                struct ltt_ust_session *usess = session->ust_session;
 
@@ -1671,7 +1671,12 @@ int cmd_enable_event_all(struct ltt_session *session,
                        goto error;
                }
 
-               ret = event_jul_enable_all(usess);
+               event.loglevel = LTTNG_LOGLEVEL_JUL_ALL;
+               event.loglevel_type = LTTNG_EVENT_LOGLEVEL_ALL;
+               strncpy(event.name, "*", sizeof(event.name));
+               event.name[sizeof(event.name) - 1] = '\0';
+
+               ret = event_jul_enable_all(usess, &event);
                if (ret != LTTNG_OK) {
                        goto error;
                }
@@ -1774,6 +1779,7 @@ error:
 int cmd_start_trace(struct ltt_session *session)
 {
        int ret;
+       unsigned long nb_chan = 0;
        struct ltt_kernel_session *ksession;
        struct ltt_ust_session *usess;
 
@@ -1789,6 +1795,21 @@ int cmd_start_trace(struct ltt_session *session)
                goto error;
        }
 
+       /*
+        * Starting a session without channel is useless since after that it's not
+        * possible to enable channel thus inform the client.
+        */
+       if (usess && usess->domain_global.channels) {
+               nb_chan += lttng_ht_get_count(usess->domain_global.channels);
+       }
+       if (ksession) {
+               nb_chan += ksession->channel_count;
+       }
+       if (!nb_chan) {
+               ret = LTTNG_ERR_NO_CHANNEL;
+               goto error;
+       }
+
        session->enabled = 1;
 
        /* Kernel tracing */
This page took 0.02462 seconds and 4 git commands to generate.