Fix: hold consumer socket lock for consumer_send_msg
[lttng-tools.git] / src / bin / lttng-sessiond / ust-consumer.c
index eac9956574e6c9e9b284c7d8ef6dd12e9768a370..b9865a0f015b76e0abb5ebcedfd8b92238b47465 100644 (file)
@@ -53,8 +53,11 @@ static char *setup_trace_path(struct consumer_output *consumer,
 
        health_code_update();
 
-       /* Allocate our self the string to make sure we never exceed PATH_MAX. */
-       pathname = zmalloc(PATH_MAX);
+       /*
+        * Allocate the string ourself to make sure we never exceed
+        * LTTNG_PATH_MAX.
+        */
+       pathname = zmalloc(LTTNG_PATH_MAX);
        if (!pathname) {
                goto error;
        }
@@ -62,7 +65,7 @@ static char *setup_trace_path(struct consumer_output *consumer,
        /* Get correct path name destination */
        if (consumer->type == CONSUMER_DST_LOCAL) {
                /* Set application path to the destination path */
-               ret = snprintf(pathname, PATH_MAX, "%s%s%s%s",
+               ret = snprintf(pathname, LTTNG_PATH_MAX, "%s%s%s%s",
                                consumer->dst.session_root_path,
                                consumer->chunk_path,
                                consumer->subdir, ua_sess->path);
@@ -81,7 +84,7 @@ static char *setup_trace_path(struct consumer_output *consumer,
                        }
                }
        } else {
-               ret = snprintf(pathname, PATH_MAX, "%s%s%s%s",
+               ret = snprintf(pathname, LTTNG_PATH_MAX, "%s%s%s%s",
                                consumer->dst.net.base_dir,
                                consumer->chunk_path,
                                consumer->subdir,
@@ -510,7 +513,9 @@ int ust_consumer_metadata_request(struct consumer_socket *socket)
 
                        memset(&msg, 0, sizeof(msg));
                        msg.cmd_type = LTTNG_ERR_UND;
+                       pthread_mutex_lock(socket->lock);
                        (void) consumer_send_msg(socket, &msg);
+                       pthread_mutex_unlock(socket->lock);
                        /*
                         * This is possible since the session might have been destroyed
                         * during a consumer metadata request. So here, return gracefully
This page took 0.023966 seconds and 4 git commands to generate.