X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=lttng-sessiond%2Fust-app.c;h=73dc770c9391f3fac295d6e16b58fcfefa195ac9;hb=90d97d10e57ba8b2b10481837efb3d2402f41f88;hp=377600f3d2f2347ce52765b43c5fbec19ceddff7;hpb=67e407978a700da256ab4f58736002826c7be7c1;p=lttng-tools.git diff --git a/lttng-sessiond/ust-app.c b/lttng-sessiond/ust-app.c index 377600f3d..73dc770c9 100644 --- a/lttng-sessiond/ust-app.c +++ b/lttng-sessiond/ust-app.c @@ -163,6 +163,9 @@ void delete_ust_app_session(int sock, struct ust_app_session *ua_sess) ret = hashtable_destroy(ua_sess->channels); assert(!ret); + if (ua_sess->handle != -1) { + ustctl_release_handle(sock, ua_sess->handle); + } free(ua_sess); } @@ -565,6 +568,8 @@ static int open_ust_metadata(struct ust_app *app, goto error; } + ua_sess->metadata->handle = ua_sess->metadata->obj->handle; + error: return ret; } @@ -1925,7 +1930,9 @@ error_rcu_unlock: int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app) { int ret = 0; + struct cds_lfht_iter iter; struct ust_app_session *ua_sess; + struct ust_app_channel *ua_chan; DBG("Stopping tracing for ust app pid %d", app->key.pid); @@ -1937,21 +1944,16 @@ int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app) goto error_rcu_unlock; } -#if 0 /* only useful when periodical flush will be supported */ - /* need to keep a handle on shm in session for this. */ - /* Flush all buffers before stopping */ - ret = ustctl_flush_buffer(usess->sock, usess->metadata->obj); - if (ret < 0) { - ERR("UST metadata flush failed"); - } - - cds_list_for_each_entry(ustchan, &usess->channels.head, list) { - ret = ustctl_flush_buffer(usess->sock, ustchan->obj); + cds_lfht_for_each_entry(ua_sess->channels, &iter, ua_chan, node) { + ret = ustctl_sock_flush_buffer(app->key.sock, ua_chan->obj); if (ret < 0) { - ERR("UST flush buffer error"); + ERR("UST app PID %d channel %s flush failed", + app->key.pid, ua_chan->name); + ERR("Ended with ret %d", ret); + /* Continuing flushing all buffers */ + continue; } } -#endif /* This inhibits UST tracing */ ret = ustctl_stop_session(app->key.sock, ua_sess->handle); @@ -1965,6 +1967,13 @@ int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app) /* Quiescent wait after stopping trace */ ustctl_wait_quiescent(app->key.sock); + /* Flush all buffers before stopping */ + ret = ustctl_sock_flush_buffer(app->key.sock, ua_sess->metadata->obj); + if (ret < 0) { + ERR("UST app PID %d metadata flush failed", app->key.pid); + ERR("Ended with ret %d", ret); + } + return 0; error_rcu_unlock: