From 6d3686dabf72d0b9403a2d65913dafd94171daff Mon Sep 17 00:00:00 2001 From: David Goulet Date: Thu, 8 Dec 2011 17:03:23 -0500 Subject: [PATCH] Flush buffers on UST stop trace Signed-off-by: David Goulet --- lttng-sessiond/lttng-ust-ctl.h | 2 ++ lttng-sessiond/ust-app.c | 22 ++++++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/lttng-sessiond/lttng-ust-ctl.h b/lttng-sessiond/lttng-ust-ctl.h index 687379448..66c84c9dd 100644 --- a/lttng-sessiond/lttng-ust-ctl.h +++ b/lttng-sessiond/lttng-ust-ctl.h @@ -59,6 +59,8 @@ int ustctl_tracepoint_list_get(int sock, int tp_list_handle, int ustctl_tracer_version(int sock, struct lttng_ust_tracer_version *v); int ustctl_wait_quiescent(int sock); +int ustctl_sock_flush_buffer(int sock, struct lttng_ust_object_data *object); + /* not implemented yet */ struct lttng_ust_calibrate; int ustctl_calibrate(int sock, struct lttng_ust_calibrate *calibrate); diff --git a/lttng-sessiond/ust-app.c b/lttng-sessiond/ust-app.c index 377600f3d..616a7ae2f 100644 --- a/lttng-sessiond/ust-app.c +++ b/lttng-sessiond/ust-app.c @@ -565,6 +565,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 +1927,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 +1941,23 @@ 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); + ret = ustctl_sock_flush_buffer(app->key.sock, ua_sess->metadata->obj); if (ret < 0) { - ERR("UST metadata flush failed"); + ERR("UST app PID %d metadata flush failed", app->key.pid); + ERR("Ended with ret %d", ret); } - 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); -- 2.34.1