Fix: ust-app: protect app socket protocol with lock
[lttng-tools.git] / src / bin / lttng-sessiond / ust-consumer.c
index 78e50df43fab90dab22892095f85050e1b1d2e11..7317b64eff8f1cff92a79af54ebb1f8440c738d9 100644 (file)
@@ -73,7 +73,7 @@ static char *setup_trace_path(struct consumer_output *consumer,
                ret = run_as_mkdir_recursive(pathname, S_IRWXU | S_IRWXG,
                                ua_sess->euid, ua_sess->egid);
                if (ret < 0) {
-                       if (ret != -EEXIST) {
+                       if (errno != EEXIST) {
                                ERR("Trace directory creation error");
                                goto error;
                        }
@@ -245,14 +245,13 @@ int ust_consumer_ask_channel(struct ust_app_session *ua_sess,
        }
 
        pthread_mutex_lock(socket->lock);
-
        ret = ask_channel_creation(ua_sess, ua_chan, consumer, socket, registry);
+       pthread_mutex_unlock(socket->lock);
        if (ret < 0) {
                goto error;
        }
 
 error:
-       pthread_mutex_unlock(socket->lock);
        return ret;
 }
 
@@ -401,7 +400,9 @@ int ust_consumer_send_stream_to_ust(struct ust_app *app,
        DBG2("UST consumer send stream to app %d", app->sock);
 
        /* Relay stream to application. */
+       pthread_mutex_lock(&app->sock_lock);
        ret = ustctl_send_stream_to_ust(app->sock, channel->obj, stream->obj);
+       pthread_mutex_unlock(&app->sock_lock);
        if (ret < 0) {
                if (ret != -EPIPE && ret != -LTTNG_UST_ERR_EXITING) {
                        ERR("ustctl send stream handle %d to app pid: %d with ret %d",
@@ -436,7 +437,9 @@ int ust_consumer_send_channel_to_ust(struct ust_app *app,
                        app->sock, app->pid, channel->name, channel->tracing_channel_id);
 
        /* Send stream to application. */
+       pthread_mutex_lock(&app->sock_lock);
        ret = ustctl_send_channel_to_ust(app->sock, ua_sess->handle, channel->obj);
+       pthread_mutex_unlock(&app->sock_lock);
        if (ret < 0) {
                if (ret != -EPIPE && ret != -LTTNG_UST_ERR_EXITING) {
                        ERR("Error ustctl send channel %s to app pid: %d with ret %d",
@@ -511,12 +514,15 @@ int ust_consumer_metadata_request(struct consumer_socket *socket)
        pthread_mutex_lock(&ust_reg->lock);
        ret_push = ust_app_push_metadata(ust_reg, socket, 1);
        pthread_mutex_unlock(&ust_reg->lock);
-       if (ret_push < 0) {
+       if (ret_push == -EPIPE) {
+               DBG("Application or relay closed while pushing metadata");
+       } else if (ret_push < 0) {
                ERR("Pushing metadata");
                ret = -1;
                goto end;
+       } else {
+               DBG("UST Consumer metadata pushed successfully");
        }
-       DBG("UST Consumer metadata pushed successfully");
        ret = 0;
 
 end:
This page took 0.024391 seconds and 4 git commands to generate.