Fix: failure to launch agent thread is not reported
[lttng-tools.git] / src / bin / lttng-sessiond / cmd.c
index 534f191a8b447d0763d56ec62d4aba42a0c3af70..2e2ae6006023c13b8457b30071e1332fdf24ef14 100644 (file)
@@ -47,7 +47,7 @@
 #include "kernel-consumer.h"
 #include "lttng-sessiond.h"
 #include "utils.h"
-#include "syscall.h"
+#include "lttng-syscall.h"
 #include "agent.h"
 #include "buffer-registry.h"
 #include "notification-thread.h"
@@ -55,6 +55,7 @@
 #include "rotate.h"
 #include "rotation-thread.h"
 #include "sessiond-timer.h"
+#include "agent-thread.h"
 
 #include "cmd.h"
 
@@ -1384,9 +1385,15 @@ int cmd_enable_channel(struct ltt_session *session,
                break;
        }
        case LTTNG_DOMAIN_UST:
+               break;
        case LTTNG_DOMAIN_JUL:
        case LTTNG_DOMAIN_LOG4J:
        case LTTNG_DOMAIN_PYTHON:
+               if (!agent_tracing_is_enabled()) {
+                       DBG("Attempted to enable a channel in an agent domain but the agent thread is not running");
+                       ret = LTTNG_ERR_AGENT_TRACING_DISABLED;
+                       goto error;
+               }
                break;
        default:
                ret = LTTNG_ERR_UNKNOWN_DOMAIN;
@@ -2094,6 +2101,12 @@ static int _cmd_enable_event(struct ltt_session *session,
 
                assert(usess);
 
+               if (!agent_tracing_is_enabled()) {
+                       DBG("Attempted to enable an event in an agent domain but the agent thread is not running");
+                       ret = LTTNG_ERR_AGENT_TRACING_DISABLED;
+                       goto error;
+               }
+
                agt = trace_ust_find_agent(usess, domain->type);
                if (!agt) {
                        agt = agent_create(domain->type);
@@ -3671,10 +3684,12 @@ static
 int clear_metadata_file(int fd)
 {
        int ret;
+       off_t lseek_ret;
 
-       ret = lseek(fd, 0, SEEK_SET);
-       if (ret < 0) {
+       lseek_ret = lseek(fd, 0, SEEK_SET);
+       if (lseek_ret < 0) {
                PERROR("lseek");
+               ret = -1;
                goto end;
        }
 
@@ -4646,7 +4661,7 @@ int cmd_rotate_get_info(struct ltt_session *session,
                        current_tracing_path_reply_len =
                                        sizeof(info_return->location.local.absolute_path);
                        info_return->location_type =
-                                       (uint8_t) LTTNG_TRACE_ARCHIVE_LOCATION_TYPE_LOCAL;
+                                       (int8_t) LTTNG_TRACE_ARCHIVE_LOCATION_TYPE_LOCAL;
                        break;
                case CONSUMER_DST_NET:
                        current_tracing_path_reply =
@@ -4655,7 +4670,7 @@ int cmd_rotate_get_info(struct ltt_session *session,
                                        sizeof(info_return->location.relay.relative_path);
                        /* Currently the only supported relay protocol. */
                        info_return->location.relay.protocol =
-                                       (uint8_t) LTTNG_TRACE_ARCHIVE_LOCATION_RELAY_PROTOCOL_TYPE_TCP;
+                                       (int8_t) LTTNG_TRACE_ARCHIVE_LOCATION_RELAY_PROTOCOL_TYPE_TCP;
 
                        ret = lttng_strncpy(info_return->location.relay.host,
                                        session_get_net_consumer_hostname(session),
@@ -4671,7 +4686,7 @@ int cmd_rotate_get_info(struct ltt_session *session,
                                        &info_return->location.relay.ports.control,
                                        &info_return->location.relay.ports.data);
                        info_return->location_type =
-                                       (uint8_t) LTTNG_TRACE_ARCHIVE_LOCATION_TYPE_RELAY;
+                                       (int8_t) LTTNG_TRACE_ARCHIVE_LOCATION_TYPE_RELAY;
                        break;
                default:
                        abort();
This page took 0.02828 seconds and 5 git commands to generate.