X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-app.c;h=679cace8a79063a07368163b46d7def48704f7f0;hb=840cb59cfc335e2ca44841f6fd57972ac3a623be;hp=374360e48c365937a20952e6623e356e21fae41c;hpb=7f13370536e1ad64db733423b542755c97160f4d;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c index 374360e48..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,7 +744,7 @@ 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; } @@ -728,7 +756,7 @@ static int create_ust_metadata_stream(struct ust_app *app, { 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); @@ -745,7 +773,7 @@ static int create_ust_metadata_stream(struct ust_app *app, } error: - health_code_update(&health_thread_cmd); + health_code_update(); return ret; } @@ -757,7 +785,7 @@ error: * On error, return a negative value. */ static int create_ust_stream(struct ust_app *app, - struct ust_app_channel *ua_chan, struct ltt_ust_stream *stream) + struct ust_app_channel *ua_chan, struct ust_app_stream *stream) { int ret; @@ -766,7 +794,7 @@ static int create_ust_stream(struct ust_app *app, assert(ua_chan->obj); assert(stream); - 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); @@ -805,7 +833,7 @@ static int create_ust_stream(struct ust_app *app, stream->handle = stream->obj->handle; error: - health_code_update(&health_thread_cmd); + health_code_update(); return ret; } @@ -817,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); @@ -828,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", @@ -846,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) { @@ -857,7 +883,7 @@ static int create_ust_channel(struct ust_app *app, } error: - health_code_update(&health_thread_cmd); + health_code_update(); return ret; } @@ -870,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, @@ -886,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) { @@ -921,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; } @@ -1112,7 +1138,7 @@ static int create_ust_app_session(struct ltt_ust_session *usess, assert(app); assert(ua_sess_ptr); - health_code_update(&health_thread_cmd); + health_code_update(); ua_sess = lookup_session_by_app(usess, app); if (ua_sess == NULL) { @@ -1128,7 +1154,7 @@ static int create_ust_app_session(struct ltt_ust_session *usess, created = 1; } - health_code_update(&health_thread_cmd); + health_code_update(); if (ua_sess->handle == -1) { ret = ustctl_create_session(app->sock); @@ -1162,7 +1188,7 @@ static int create_ust_app_session(struct ltt_ust_session *usess, ret = 0; error: - health_code_update(&health_thread_cmd); + health_code_update(); return ret; } @@ -1442,7 +1468,7 @@ static int create_ust_app_metadata(struct ust_app_session *ua_sess, } 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; @@ -1688,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) { /* @@ -1706,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; @@ -1740,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; } @@ -1768,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) { /* @@ -1786,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; @@ -1825,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; } @@ -2314,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); @@ -2362,13 +2388,12 @@ 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; } - health_code_update(&health_thread_cmd); + health_code_update(); ret = create_ust_stream(app, ua_chan, ustream); if (ret < 0) { @@ -2383,7 +2408,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(); /* Order is important this is why a list is used. */ cds_list_add_tail(&ustream->list, &ua_chan->streams.head); @@ -2393,7 +2418,7 @@ int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app) ustream->handle); } - health_code_update(&health_thread_cmd); + health_code_update(); } switch (app->bits_per_long) { @@ -2422,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 */ @@ -2435,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; } @@ -2484,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); @@ -2493,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", @@ -2513,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); @@ -2524,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; } @@ -2569,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 */ @@ -2580,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; } @@ -2933,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) { @@ -2950,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: @@ -2959,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; } @@ -2983,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) { @@ -3005,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; }