X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-app.c;h=6a2cfc988a24006b03ac3eee21747616d58e7e3a;hp=b272fd6799b75380c142d80beb958d1e73e1f0ad;hb=68264071f9d1b789de1350cbec479b52a9b54acf;hpb=86acf0da3c007ee928d4214ab9aa725fdb3c1b82 diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c index b272fd679..6a2cfc988 100644 --- a/src/bin/lttng-sessiond/ust-app.c +++ b/src/bin/lttng-sessiond/ust-app.c @@ -1405,8 +1405,10 @@ int ust_app_register(struct ust_register_msg *msg, int sock) struct ust_app *lta; int ret; - if ((msg->bits_per_long == 64 && ust_consumerd64_fd == -EINVAL) - || (msg->bits_per_long == 32 && ust_consumerd32_fd == -EINVAL)) { + if ((msg->bits_per_long == 64 && + (uatomic_read(&ust_consumerd64_fd) == -EINVAL)) + || (msg->bits_per_long == 32 && + (uatomic_read(&ust_consumerd32_fd) == -EINVAL))) { ERR("Registration failed: application \"%s\" (pid: %d) has " "%d-bit long, but no consumerd for this long size is available.\n", msg->name, msg->pid, msg->bits_per_long); @@ -2155,7 +2157,7 @@ int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app) struct ust_app_session *ua_sess; struct ust_app_channel *ua_chan; struct ltt_ust_stream *ustream; - int consumerd_fd; + struct consumer_socket *socket; DBG("Starting tracing for ust app pid %d", app->pid); @@ -2175,6 +2177,20 @@ int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app) goto skip_setup; } + /* Create directories if consumer is LOCAL and has a path defined. */ + if (usess->consumer->type == CONSUMER_DST_LOCAL && + strlen(usess->consumer->dst.trace_path) > 0) { + ret = run_as_mkdir_recursive(usess->consumer->dst.trace_path, + S_IRWXU | S_IRWXG, usess->uid, usess->gid); + if (ret < 0) { + if (ret != -EEXIST) { + ERR("Trace directory creation error"); + ret = -1; + goto error_rcu_unlock; + } + } + } + /* Indicate that the session has been started once */ ua_sess->started = 1; @@ -2238,10 +2254,18 @@ int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app) switch (app->bits_per_long) { case 64: - consumerd_fd = ust_consumerd64_fd; + socket = consumer_find_socket(uatomic_read(&ust_consumerd64_fd), + usess->consumer); + if (socket == NULL) { + goto skip_setup; + } break; case 32: - consumerd_fd = ust_consumerd32_fd; + socket = consumer_find_socket(uatomic_read(&ust_consumerd32_fd), + usess->consumer); + if (socket == NULL) { + goto skip_setup; + } break; default: ret = -EINVAL; @@ -2249,7 +2273,7 @@ int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app) } /* Setup UST consumer socket and send fds to it */ - ret = ust_consumer_send_session(consumerd_fd, ua_sess, usess->consumer); + ret = ust_consumer_send_session(ua_sess, usess->consumer, socket); if (ret < 0) { goto error_rcu_unlock; } @@ -2897,12 +2921,12 @@ int ust_app_validate_version(int sock) } /* Validate version */ - if (app->version.major > UST_APP_MAJOR_VERSION) { + if (app->version.major != UST_APP_MAJOR_VERSION) { goto error; } - DBG2("UST app PID %d is compatible with major version %d " - "(supporting <= %d)", app->pid, app->version.major, + DBG2("UST app PID %d is compatible with internal major version %d " + "(supporting == %d)", app->pid, app->version.major, UST_APP_MAJOR_VERSION); app->compatible = 1; rcu_read_unlock(); @@ -2910,8 +2934,8 @@ int ust_app_validate_version(int sock) return 0; error: - DBG2("UST app PID %d is not compatible with major version %d " - "(supporting <= %d)", app->pid, app->version.major, + DBG2("UST app PID %d is not compatible with internal major version %d " + "(supporting == %d)", app->pid, app->version.major, UST_APP_MAJOR_VERSION); app->compatible = 0; rcu_read_unlock();