Fix: consumerd: type confusion in lttng_consumer_send_error
[lttng-tools.git] / src / bin / lttng-sessiond / manage-consumer.c
index 380cd057c906ba2856881cb238cd517ecd588fd7..8f0dde185bd9d7bf58c07f88bfe8392c9a8fc5b7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 David Goulet <david.goulet@polymtl.ca>
+ * Copyright (C) 2011 EfficiOS Inc.
  * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  * Copyright (C) 2013 Jérémie Galarneau <jeremie.galarneau@efficios.com>
  *
@@ -67,7 +67,7 @@ static void *thread_consumer_management(void *data)
        rcu_register_thread();
        rcu_thread_online();
 
-       health_register(health_sessiond, HEALTH_SESSIOND_TYPE_CONSUMER);
+       health_register(the_health_sessiond, HEALTH_SESSIOND_TYPE_CONSUMER);
 
        health_code_update();
 
@@ -161,9 +161,13 @@ static void *thread_consumer_management(void *data)
 
        DBG2("Receiving code from consumer err_sock");
 
-       /* Getting status code from kconsumerd */
-       ret = lttcomm_recv_unix_sock(sock, &code,
-                       sizeof(enum lttcomm_return_code));
+       /* Getting status code from consumerd */
+       {
+               int32_t comm_code = 0;
+
+               ret = lttcomm_recv_unix_sock(sock, &comm_code, sizeof(comm_code));
+               code = (typeof(code)) comm_code;
+       }
        if (ret <= 0) {
                mark_thread_intialization_as_failed(notifiers);
                goto error;
@@ -243,7 +247,7 @@ static void *thread_consumer_management(void *data)
        cmd_socket_wrapper->lock = &consumer_data->lock;
 
        pthread_mutex_lock(cmd_socket_wrapper->lock);
-       ret = consumer_init(cmd_socket_wrapper, sessiond_uuid);
+       ret = consumer_init(cmd_socket_wrapper, the_sessiond_uuid);
        if (ret) {
                ERR("Failed to send sessiond uuid to consumer daemon");
                mark_thread_intialization_as_failed(notifiers);
@@ -308,9 +312,14 @@ static void *thread_consumer_management(void *data)
                                        goto error;
                                }
                                health_code_update();
-                               /* Wait for any kconsumerd error */
-                               ret = lttcomm_recv_unix_sock(sock, &code,
-                                               sizeof(enum lttcomm_return_code));
+                               /* Wait for any consumerd error */
+                               {
+                                       int32_t comm_code = 0;
+
+                                       ret = lttcomm_recv_unix_sock(
+                                               sock, &comm_code, sizeof(comm_code));
+                                       code = (typeof(code)) comm_code;
+                               }
                                if (ret <= 0) {
                                        ERR("consumer closed the command socket");
                                        goto error;
@@ -350,10 +359,10 @@ error:
 
        /* Immediately set the consumerd state to stopped */
        if (consumer_data->type == LTTNG_CONSUMER_KERNEL) {
-               uatomic_set(&kernel_consumerd_state, CONSUMER_ERROR);
+               uatomic_set(&the_kernel_consumerd_state, CONSUMER_ERROR);
        } else if (consumer_data->type == LTTNG_CONSUMER64_UST ||
                        consumer_data->type == LTTNG_CONSUMER32_UST) {
-               uatomic_set(&ust_consumerd_state, CONSUMER_ERROR);
+               uatomic_set(&the_ust_consumerd_state, CONSUMER_ERROR);
        } else {
                /* Code flow error... */
                assert(0);
@@ -406,7 +415,7 @@ error_poll:
                health_error();
                ERR("Health error occurred in %s", __func__);
        }
-       health_unregister(health_sessiond);
+       health_unregister(the_health_sessiond);
        DBG("consumer thread cleanup completed");
 
        rcu_thread_offline();
This page took 0.027267 seconds and 4 git commands to generate.