X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-app.c;h=1451963ad41f14cb1809e37594a3960238112819;hb=beb7c14849e4c7973ff94e61787989173e84ca4e;hp=58b8080b56dff398d82e7262257e770682f1afcc;hpb=9e794c1115c765ab8481c5666cfaddf5962a8974;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c index 58b8080b5..1451963ad 100644 --- a/src/bin/lttng-sessiond/ust-app.c +++ b/src/bin/lttng-sessiond/ust-app.c @@ -389,7 +389,8 @@ void delete_ust_app_channel(int sock, struct ust_app_channel *ua_chan, if (ua_chan->obj != NULL) { /* Remove channel from application UST object descriptor. */ iter.iter.node = &ua_chan->ust_objd_node.node; - lttng_ht_del(app->ust_objd, &iter); + ret = lttng_ht_del(app->ust_objd, &iter); + assert(!ret); ret = ustctl_release_object(sock, ua_chan->obj); if (ret < 0 && ret != -EPIPE && ret != -LTTNG_UST_ERR_EXITING) { ERR("UST app sock %d release channel obj failed with ret %d", @@ -478,6 +479,11 @@ push_data: if (ret == -LTTCOMM_CONSUMERD_CHANNEL_FAIL) { ret = 0; } + + /* Update back the actual metadata len sent since it failed here. */ + pthread_mutex_lock(®istry->lock); + registry->metadata_len_sent -= len; + pthread_mutex_unlock(®istry->lock); ret_val = ret; goto error_push; } @@ -3058,7 +3064,7 @@ int ust_app_list_events(struct lttng_event **events) /* Handle ustctl error. */ if (ret < 0) { free(tmp_event); - if (ret != -LTTNG_UST_ERR_EXITING || ret != -EPIPE) { + if (ret != -LTTNG_UST_ERR_EXITING && ret != -EPIPE) { ERR("UST app tp list get failed for app %d with ret %d", app->sock, ret); } else { @@ -3158,7 +3164,7 @@ int ust_app_list_event_fields(struct lttng_event_field **fields) /* Handle ustctl error. */ if (ret < 0) { free(tmp_event); - if (ret != -LTTNG_UST_ERR_EXITING || ret != -EPIPE) { + if (ret != -LTTNG_UST_ERR_EXITING && ret != -EPIPE) { ERR("UST app tp list field failed for app %d with ret %d", app->sock, ret); } else { @@ -4986,6 +4992,7 @@ int ust_app_snapshot_record(struct ltt_ust_session *usess, struct snapshot_output *output, int wait, unsigned int nb_streams) { int ret = 0; + unsigned int snapshot_done = 0; struct lttng_ht_iter iter; struct ust_app *app; char pathname[PATH_MAX]; @@ -5060,6 +5067,7 @@ int ust_app_snapshot_record(struct ltt_ust_session *usess, if (ret < 0) { goto error; } + snapshot_done = 1; } break; } @@ -5127,6 +5135,7 @@ int ust_app_snapshot_record(struct ltt_ust_session *usess, if (ret < 0) { goto error; } + snapshot_done = 1; } break; } @@ -5135,6 +5144,15 @@ int ust_app_snapshot_record(struct ltt_ust_session *usess, break; } + if (!snapshot_done) { + /* + * If no snapshot was made and we are not in the error path, this means + * that there are no buffers thus no (prior) application to snapshot + * data from so we have simply NO data. + */ + ret = -ENODATA; + } + error: rcu_read_unlock(); return ret;