X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-app.c;h=679cace8a79063a07368163b46d7def48704f7f0;hb=a78af745624dfc8bfe90748a1730fecbb4677a17;hp=98ea50fdb250a6f0f89b2c73240eb7dea4df05d9;hpb=5c3c99d75ba81b265ffc4d41a1f27cf926b7157a;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c index 98ea50fdb..679cace8a 100644 --- a/src/bin/lttng-sessiond/ust-app.c +++ b/src/bin/lttng-sessiond/ust-app.c @@ -155,7 +155,7 @@ void delete_ust_app_event(int sock, struct ust_app_event *ua_event) * this function. */ static -void delete_ust_app_stream(int sock, struct ltt_ust_stream *stream) +void delete_ust_app_stream(int sock, struct ust_app_stream *stream) { if (stream->obj) { ustctl_release_object(sock, stream->obj); @@ -176,7 +176,7 @@ void delete_ust_app_channel(int sock, struct ust_app_channel *ua_chan) struct lttng_ht_iter iter; struct ust_app_event *ua_event; struct ust_app_ctx *ua_ctx; - struct ltt_ust_stream *stream, *stmp; + struct ust_app_stream *stream, *stmp; /* Wipe stream */ cds_list_for_each_entry_safe(stream, stmp, &ua_chan->streams.head, list) { @@ -367,7 +367,13 @@ struct ust_app_channel *alloc_ust_app_channel(char *name, /* Copy attributes */ if (attr) { - memcpy(&ua_chan->attr, attr, sizeof(ua_chan->attr)); + /* Translate from lttng_ust_channel to lttng_ust_channel_attr.*/ + ua_chan->attr.subbuf_size = attr->subbuf_size; + ua_chan->attr.num_subbuf = attr->num_subbuf; + ua_chan->attr.overwrite = attr->overwrite; + ua_chan->attr.switch_timer_interval = attr->switch_timer_interval; + ua_chan->attr.read_timer_interval = attr->read_timer_interval; + ua_chan->attr.output = attr->output; } DBG3("UST app channel %s allocated", ua_chan->name); @@ -378,6 +384,28 @@ error: return NULL; } +/* + * Allocate and initialize a UST app stream. + * + * Return newly allocated stream pointer or NULL on error. + */ +static struct ust_app_stream *alloc_ust_app_stream(void) +{ + struct ust_app_stream *stream = NULL; + + stream = zmalloc(sizeof(*stream)); + if (stream == NULL) { + PERROR("zmalloc ust app stream"); + goto error; + } + + /* Zero could be a valid value for a handle so flag it to -1. */ + stream->handle = -1; + +error: + return stream; +} + /* * Alloc new UST app event. */ @@ -526,7 +554,7 @@ int create_ust_channel_context(struct ust_app_channel *ua_chan, { int ret; - health_code_update(&health_thread_cmd); + health_code_update(); ret = ustctl_add_context(app->sock, &ua_ctx->ctx, ua_chan->obj, &ua_ctx->obj); @@ -539,7 +567,7 @@ int create_ust_channel_context(struct ust_app_channel *ua_chan, DBG2("UST app context created successfully for channel %s", ua_chan->name); error: - health_code_update(&health_thread_cmd); + health_code_update(); return ret; } @@ -552,7 +580,7 @@ int set_ust_event_filter(struct ust_app_event *ua_event, { int ret; - health_code_update(&health_thread_cmd); + health_code_update(); if (!ua_event->filter) { ret = 0; @@ -568,7 +596,7 @@ int set_ust_event_filter(struct ust_app_event *ua_event, DBG2("UST filter set successfully for event %s", ua_event->name); error: - health_code_update(&health_thread_cmd); + health_code_update(); return ret; } @@ -580,7 +608,7 @@ static int disable_ust_event(struct ust_app *app, { int ret; - health_code_update(&health_thread_cmd); + health_code_update(); ret = ustctl_disable(app->sock, ua_event->obj); if (ret < 0) { @@ -594,7 +622,7 @@ static int disable_ust_event(struct ust_app *app, ua_event->attr.name, app->pid); error: - health_code_update(&health_thread_cmd); + health_code_update(); return ret; } @@ -606,7 +634,7 @@ static int disable_ust_channel(struct ust_app *app, { int ret; - health_code_update(&health_thread_cmd); + health_code_update(); ret = ustctl_disable(app->sock, ua_chan->obj); if (ret < 0) { @@ -620,7 +648,7 @@ static int disable_ust_channel(struct ust_app *app, ua_chan->name, app->pid); error: - health_code_update(&health_thread_cmd); + health_code_update(); return ret; } @@ -632,7 +660,7 @@ static int enable_ust_channel(struct ust_app *app, { int ret; - health_code_update(&health_thread_cmd); + health_code_update(); ret = ustctl_enable(app->sock, ua_chan->obj); if (ret < 0) { @@ -648,7 +676,7 @@ static int enable_ust_channel(struct ust_app *app, ua_chan->name, app->pid); error: - health_code_update(&health_thread_cmd); + health_code_update(); return ret; } @@ -660,7 +688,7 @@ static int enable_ust_event(struct ust_app *app, { int ret; - health_code_update(&health_thread_cmd); + health_code_update(); ret = ustctl_enable(app->sock, ua_event->obj); if (ret < 0) { @@ -674,7 +702,7 @@ static int enable_ust_event(struct ust_app *app, ua_event->attr.name, app->pid); error: - health_code_update(&health_thread_cmd); + health_code_update(); return ret; } @@ -687,7 +715,7 @@ static int open_ust_metadata(struct ust_app *app, int ret; struct lttng_ust_channel_attr uattr; - health_code_update(&health_thread_cmd); + health_code_update(); uattr.overwrite = ua_sess->metadata->attr.overwrite; uattr.subbuf_size = ua_sess->metadata->attr.subbuf_size; @@ -716,19 +744,19 @@ static int open_ust_metadata(struct ust_app *app, ua_sess->metadata->handle = ua_sess->metadata->obj->handle; error: - health_code_update(&health_thread_cmd); + health_code_update(); return ret; } /* - * Create stream onto the UST tracer for a UST session. + * Create metadata stream onto the UST tracer for a given session. */ -static int create_ust_stream(struct ust_app *app, +static int create_ust_metadata_stream(struct ust_app *app, struct ust_app_session *ua_sess) { int ret; - health_code_update(&health_thread_cmd); + health_code_update(); /* We are going to receive 2 fds, we need to reserve them. */ ret = lttng_fd_get(LTTNG_FD_APPS, 2); @@ -739,12 +767,73 @@ static int create_ust_stream(struct ust_app *app, ret = ustctl_create_stream(app->sock, ua_sess->metadata->obj, &ua_sess->metadata->stream_obj); if (ret < 0) { + lttng_fd_put(LTTNG_FD_APPS, 2); ERR("UST create metadata stream failed"); goto error; } error: - health_code_update(&health_thread_cmd); + health_code_update(); + return ret; +} + +/* + * Create stream onto the UST tracer for a given channel. + * + * Return -ENOENT if no more stream is available for this channel. + * On success, return 0. + * On error, return a negative value. + */ +static int create_ust_stream(struct ust_app *app, + struct ust_app_channel *ua_chan, struct ust_app_stream *stream) +{ + int ret; + + assert(app); + assert(ua_chan); + assert(ua_chan->obj); + assert(stream); + + health_code_update(); + + /* We are going to receive 2 fds, we need to reserve them. */ + ret = lttng_fd_get(LTTNG_FD_APPS, 2); + if (ret < 0) { + ERR("Exhausted number of available FD on stream creation"); + /* Just to make sure we never return -ENOENT. */ + ret = -1; + goto error; + } + + /* + * Set the stream name before creating it. On error, we don't have to + * delete it on the tracer side. + */ + ret = snprintf(stream->name, sizeof(stream->name), "%s_%u", + ua_chan->name, ua_chan->streams.count); + if (ret < 0) { + /* Without the stream name we can't continue using it. */ + PERROR("snprintf UST create stream"); + /* Just to make sure we never return -ENOENT. */ + ret = -1; + goto error; + } + + ret = ustctl_create_stream(app->sock, ua_chan->obj, &stream->obj); + if (ret < 0) { + lttng_fd_put(LTTNG_FD_APPS, 2); + /* Indicates that there is no more stream for that channel. */ + if (ret != -LTTNG_UST_ERR_NOENT) { + ERR("UST create metadata stream failed (ret: %d)", ret); + } + goto error; + } + + /* Set stream handle with the returned value. */ + stream->handle = stream->obj->handle; + +error: + health_code_update(); return ret; } @@ -756,9 +845,7 @@ static int create_ust_channel(struct ust_app *app, { int ret; - health_code_update(&health_thread_cmd); - - /* TODO: remove cast and use lttng-ust-abi.h */ + health_code_update(); /* We are going to receive 2 fds, we need to reserve them. */ ret = lttng_fd_get(LTTNG_FD_APPS, 2); @@ -767,10 +854,10 @@ static int create_ust_channel(struct ust_app *app, goto error; } - health_code_update(&health_thread_cmd); + health_code_update(); - ret = ustctl_create_channel(app->sock, ua_sess->handle, - (struct lttng_ust_channel_attr *)&ua_chan->attr, &ua_chan->obj); + ret = ustctl_create_channel(app->sock, ua_sess->handle, &ua_chan->attr, + &ua_chan->obj); if (ret < 0) { ERR("Creating channel %s for app (pid: %d, sock: %d) " "and session handle %d with ret %d", @@ -785,7 +872,7 @@ static int create_ust_channel(struct ust_app *app, DBG2("UST app channel %s created successfully for pid:%d and sock:%d", ua_chan->name, app->pid, app->sock); - health_code_update(&health_thread_cmd); + health_code_update(); /* If channel is not enabled, disable it on the tracer */ if (!ua_chan->enabled) { @@ -796,7 +883,7 @@ static int create_ust_channel(struct ust_app *app, } error: - health_code_update(&health_thread_cmd); + health_code_update(); return ret; } @@ -809,7 +896,7 @@ int create_ust_event(struct ust_app *app, struct ust_app_session *ua_sess, { int ret = 0; - health_code_update(&health_thread_cmd); + health_code_update(); /* Create UST event on tracer */ ret = ustctl_create_event(app->sock, &ua_event->attr, ua_chan->obj, @@ -825,7 +912,7 @@ int create_ust_event(struct ust_app *app, struct ust_app_session *ua_sess, DBG2("UST app event %s created successfully for pid:%d", ua_event->attr.name, app->pid); - health_code_update(&health_thread_cmd); + health_code_update(); /* Set filter if one is present. */ if (ua_event->filter) { @@ -860,7 +947,7 @@ int create_ust_event(struct ust_app *app, struct ust_app_session *ua_sess, } error: - health_code_update(&health_thread_cmd); + health_code_update(); return ret; } @@ -1030,17 +1117,28 @@ error: } /* - * Create a UST session onto the tracer of app and add it the session - * hashtable. + * Create a session on the tracer side for the given app. + * + * On success, ua_sess_ptr is populated with the session pointer or else left + * untouched. If the session was created, is_created is set to 1. On error, + * it's left untouched. Note that ua_sess_ptr is mandatory but is_created can + * be NULL. * - * Return ust app session or NULL on error. + * Returns 0 on success or else a negative code which is either -ENOMEM or + * -ENOTCONN which is the default code if the ustctl_create_session fails. */ -static struct ust_app_session *create_ust_app_session( - struct ltt_ust_session *usess, struct ust_app *app) +static int create_ust_app_session(struct ltt_ust_session *usess, + struct ust_app *app, struct ust_app_session **ua_sess_ptr, + int *is_created) { + int ret, created = 0; struct ust_app_session *ua_sess; - health_code_update(&health_thread_cmd); + assert(usess); + assert(app); + assert(ua_sess_ptr); + + health_code_update(); ua_sess = lookup_session_by_app(usess, app); if (ua_sess == NULL) { @@ -1049,23 +1147,28 @@ static struct ust_app_session *create_ust_app_session( ua_sess = alloc_ust_app_session(); if (ua_sess == NULL) { /* Only malloc can failed so something is really wrong */ - goto end; + ret = -ENOMEM; + goto error; } shadow_copy_session(ua_sess, usess, app); + created = 1; } - health_code_update(&health_thread_cmd); + health_code_update(); if (ua_sess->handle == -1) { - int ret; - ret = ustctl_create_session(app->sock); if (ret < 0) { ERR("Creating session for app pid %d", app->pid); delete_ust_app_session(-1, ua_sess); - /* This means that the tracer is gone... */ - ua_sess = (void*) -1UL; - goto end; + if (ret != -ENOMEM) { + /* + * Tracer is probably gone or got an internal error so let's + * behave like it will soon unregister or not usable. + */ + ret = -ENOTCONN; + } + goto error; } ua_sess->handle = ret; @@ -1077,9 +1180,16 @@ static struct ust_app_session *create_ust_app_session( DBG2("UST app session created successfully with handle %d", ret); } -end: - health_code_update(&health_thread_cmd); - return ua_sess; + *ua_sess_ptr = ua_sess; + if (is_created) { + *is_created = created; + } + /* Everything went well. */ + ret = 0; + +error: + health_code_update(); + return ret; } /* @@ -1352,13 +1462,13 @@ static int create_ust_app_metadata(struct ust_app_session *ua_sess, /* Open UST metadata stream */ if (ua_sess->metadata->stream_obj == NULL) { - ret = create_ust_stream(app, ua_sess); + ret = create_ust_metadata_stream(app, ua_sess); if (ret < 0) { goto error; } ret = snprintf(ua_sess->metadata->pathname, PATH_MAX, - "%s/metadata", ua_sess->path); + "%s/" DEFAULT_METADATA_NAME, ua_sess->path); if (ret < 0) { PERROR("asprintf UST create stream"); goto error; @@ -1604,7 +1714,7 @@ int ust_app_list_events(struct lttng_event **events) cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { struct lttng_ust_tracepoint_iter uiter; - health_code_update(&health_thread_cmd); + health_code_update(); if (!app->compatible) { /* @@ -1622,7 +1732,7 @@ int ust_app_list_events(struct lttng_event **events) while ((ret = ustctl_tracepoint_list_get(app->sock, handle, &uiter)) != -LTTNG_UST_ERR_NOENT) { - health_code_update(&health_thread_cmd); + health_code_update(); if (count >= nbmem) { /* In case the realloc fails, we free the memory */ void *ptr; @@ -1656,7 +1766,7 @@ int ust_app_list_events(struct lttng_event **events) rcu_error: rcu_read_unlock(); error: - health_code_update(&health_thread_cmd); + health_code_update(); return ret; } @@ -1684,7 +1794,7 @@ int ust_app_list_event_fields(struct lttng_event_field **fields) cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { struct lttng_ust_field_iter uiter; - health_code_update(&health_thread_cmd); + health_code_update(); if (!app->compatible) { /* @@ -1702,7 +1812,7 @@ int ust_app_list_event_fields(struct lttng_event_field **fields) while ((ret = ustctl_tracepoint_field_list_get(app->sock, handle, &uiter)) != -LTTNG_UST_ERR_NOENT) { - health_code_update(&health_thread_cmd); + health_code_update(); if (count >= nbmem) { /* In case the realloc fails, we free the memory */ void *ptr; @@ -1741,7 +1851,7 @@ int ust_app_list_event_fields(struct lttng_event_field **fields) rcu_error: rcu_read_unlock(); error: - health_code_update(&health_thread_cmd); + health_code_update(); return ret; } @@ -2030,10 +2140,10 @@ int ust_app_disable_all_event_glb(struct ltt_ust_session *usess, int ust_app_create_channel_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan) { - int ret = 0; + int ret = 0, created; struct lttng_ht_iter iter; struct ust_app *app; - struct ust_app_session *ua_sess; + struct ust_app_session *ua_sess = NULL; /* Very wrong code flow */ assert(usess); @@ -2058,25 +2168,34 @@ int ust_app_create_channel_glb(struct ltt_ust_session *usess, * that if session exist, it will simply return a pointer to the ust * app session. */ - ua_sess = create_ust_app_session(usess, app); - if (ua_sess == NULL) { - /* The malloc() failed. */ - ret = -ENOMEM; - goto error_rcu_unlock; - } else if (ua_sess == (void *) -1UL) { - /* - * The application's socket is not valid. Either a bad socket or a - * timeout on it. We can't inform yet the caller that for a - * specific app, the session failed so we continue here. - */ - continue; + ret = create_ust_app_session(usess, app, &ua_sess, &created); + if (ret < 0) { + switch (ret) { + case -ENOTCONN: + /* + * The application's socket is not valid. Either a bad socket + * or a timeout on it. We can't inform the caller that for a + * specific app, the session failed so lets continue here. + */ + continue; + case -ENOMEM: + default: + goto error_rcu_unlock; + } } + assert(ua_sess); /* Create channel onto application. We don't need the chan ref. */ ret = create_ust_app_channel(ua_sess, uchan, app, NULL); - if (ret < 0 && ret == -ENOMEM) { - /* No more memory is a fatal error. Stop right now. */ - goto error_rcu_unlock; + if (ret < 0) { + if (ret == -ENOMEM) { + /* No more memory is a fatal error. Stop right now. */ + goto error_rcu_unlock; + } + /* Cleanup the created session if it's the case. */ + if (created) { + delete_ust_app_session(app->sock, ua_sess); + } } } @@ -2221,7 +2340,7 @@ int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app) struct lttng_ht_iter iter; struct ust_app_session *ua_sess; struct ust_app_channel *ua_chan; - struct ltt_ust_stream *ustream; + struct ust_app_stream *ustream; struct consumer_socket *socket; DBG("Starting tracing for ust app pid %d", app->pid); @@ -2269,53 +2388,37 @@ int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app) /* Create all streams */ while (1) { /* Create UST stream */ - ustream = zmalloc(sizeof(*ustream)); + ustream = alloc_ust_app_stream(); if (ustream == NULL) { - PERROR("zmalloc ust stream"); - goto error_rcu_unlock; - } - - /* We are going to receive 2 fds, we need to reserve them. */ - ret = lttng_fd_get(LTTNG_FD_APPS, 2); - if (ret < 0) { - ERR("Exhausted number of available FD upon stream create"); - free(ustream); goto error_rcu_unlock; } - health_code_update(&health_thread_cmd); + health_code_update(); - ret = ustctl_create_stream(app->sock, ua_chan->obj, - &ustream->obj); + ret = create_ust_stream(app, ua_chan, ustream); if (ret < 0) { - /* Got all streams */ - lttng_fd_put(LTTNG_FD_APPS, 2); + /* Free unused memory after this point. */ free(ustream); + if (ret == -LTTNG_UST_ERR_NOENT) { + /* Got all streams. Continue normal execution. */ + break; + } + /* Error at this point. Stop everything. */ ret = LTTNG_ERR_UST_STREAM_FAIL; - break; + goto error_rcu_unlock; } - ustream->handle = ustream->obj->handle; - health_code_update(&health_thread_cmd); + health_code_update(); - /* Order is important */ + /* Order is important this is why a list is used. */ cds_list_add_tail(&ustream->list, &ua_chan->streams.head); - ret = snprintf(ustream->name, sizeof(ustream->name), "%s_%u", - ua_chan->name, ua_chan->streams.count); ua_chan->streams.count++; - if (ret < 0) { - PERROR("asprintf UST create stream"); - /* - * XXX what should we do here with the - * stream ? - */ - continue; - } + DBG2("UST stream %d ready (handle: %d)", ua_chan->streams.count, ustream->handle); } - health_code_update(&health_thread_cmd); + health_code_update(); } switch (app->bits_per_long) { @@ -2344,7 +2447,7 @@ int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app) goto error_rcu_unlock; } - health_code_update(&health_thread_cmd); + health_code_update(); skip_setup: /* This start the UST tracing */ @@ -2357,19 +2460,19 @@ skip_setup: /* Indicate that the session has been started once */ ua_sess->started = 1; - health_code_update(&health_thread_cmd); + health_code_update(); /* Quiescent wait after starting trace */ ustctl_wait_quiescent(app->sock); end: rcu_read_unlock(); - health_code_update(&health_thread_cmd); + health_code_update(); return 0; error_rcu_unlock: rcu_read_unlock(); - health_code_update(&health_thread_cmd); + health_code_update(); return -1; } @@ -2406,7 +2509,7 @@ int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app) goto error_rcu_unlock; } - health_code_update(&health_thread_cmd); + health_code_update(); /* This inhibits UST tracing */ ret = ustctl_stop_session(app->sock, ua_sess->handle); @@ -2415,17 +2518,17 @@ int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app) goto error_rcu_unlock; } - health_code_update(&health_thread_cmd); + health_code_update(); /* Quiescent wait after stopping trace */ ustctl_wait_quiescent(app->sock); - health_code_update(&health_thread_cmd); + health_code_update(); /* Flushing buffers */ cds_lfht_for_each_entry(ua_sess->channels->ht, &iter.iter, ua_chan, node.node) { - health_code_update(&health_thread_cmd); + health_code_update(); ret = ustctl_sock_flush_buffer(app->sock, ua_chan->obj); if (ret < 0) { ERR("UST app PID %d channel %s flush failed with ret %d", @@ -2435,7 +2538,7 @@ int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app) } } - health_code_update(&health_thread_cmd); + health_code_update(); /* Flush all buffers before stopping */ ret = ustctl_sock_flush_buffer(app->sock, ua_sess->metadata->obj); @@ -2446,12 +2549,12 @@ int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app) end: rcu_read_unlock(); - health_code_update(&health_thread_cmd); + health_code_update(); return 0; error_rcu_unlock: rcu_read_unlock(); - health_code_update(&health_thread_cmd); + health_code_update(); return -1; } @@ -2491,10 +2594,10 @@ static int destroy_trace(struct ltt_ust_session *usess, struct ust_app *app) obj.shm_fd = -1; obj.wait_fd = -1; obj.memory_map_size = 0; - health_code_update(&health_thread_cmd); + health_code_update(); ustctl_release_object(app->sock, &obj); - health_code_update(&health_thread_cmd); + health_code_update(); delete_ust_app_session(app->sock, ua_sess); /* Quiescent wait after stopping trace */ @@ -2502,7 +2605,7 @@ static int destroy_trace(struct ltt_ust_session *usess, struct ust_app *app) end: rcu_read_unlock(); - health_code_update(&health_thread_cmd); + health_code_update(); return 0; } @@ -2592,7 +2695,7 @@ void ust_app_global_update(struct ltt_ust_session *usess, int sock) int ret = 0; struct lttng_ht_iter iter, uiter, iter_ctx; struct ust_app *app; - struct ust_app_session *ua_sess; + struct ust_app_session *ua_sess = NULL; struct ust_app_channel *ua_chan; struct ust_app_event *ua_event; struct ust_app_ctx *ua_ctx; @@ -2614,11 +2717,12 @@ void ust_app_global_update(struct ltt_ust_session *usess, int sock) goto error; } - ua_sess = create_ust_app_session(usess, app); - if (ua_sess == NULL || ua_sess == (void *) -1UL) { - /* Tracer is gone for this session and has been freed */ + ret = create_ust_app_session(usess, app, &ua_sess, NULL); + if (ret < 0) { + /* Tracer is probably gone or ENOMEM. */ goto error; } + assert(ua_sess); /* * We can iterate safely here over all UST app session sicne the create ust @@ -2651,12 +2755,6 @@ void ust_app_global_update(struct ltt_ust_session *usess, int sock) /* FIXME: Should we quit here or continue... */ continue; } - - ret = set_ust_event_filter(ua_event, app); - if (ret < 0) { - /* FIXME: Should we quit here or continue... */ - continue; - } } } @@ -2860,7 +2958,7 @@ int ust_app_validate_version(int sock) app = find_app_by_sock(sock); assert(app); - health_code_update(&health_thread_cmd); + health_code_update(); ret = ustctl_tracer_version(sock, &app->version); if (ret < 0) { @@ -2877,7 +2975,7 @@ int ust_app_validate_version(int sock) UST_APP_MAJOR_VERSION); app->compatible = 1; rcu_read_unlock(); - health_code_update(&health_thread_cmd); + health_code_update(); return 0; error: @@ -2886,7 +2984,7 @@ error: UST_APP_MAJOR_VERSION); app->compatible = 0; rcu_read_unlock(); - health_code_update(&health_thread_cmd); + health_code_update(); return -1; } @@ -2910,7 +3008,7 @@ int ust_app_calibrate_glb(struct lttng_ust_calibrate *calibrate) continue; } - health_code_update(&health_thread_cmd); + health_code_update(); ret = ustctl_calibrate(app->sock, calibrate); if (ret < 0) { @@ -2932,7 +3030,7 @@ int ust_app_calibrate_glb(struct lttng_ust_calibrate *calibrate) rcu_read_unlock(); - health_code_update(&health_thread_cmd); + health_code_update(); return ret; }