Flush buffers on UST stop trace
authorDavid Goulet <david.goulet@polymtl.ca>
Thu, 8 Dec 2011 22:03:23 +0000 (17:03 -0500)
committerDavid Goulet <david.goulet@polymtl.ca>
Thu, 8 Dec 2011 22:03:23 +0000 (17:03 -0500)
Signed-off-by: David Goulet <david.goulet@polymtl.ca>
lttng-sessiond/lttng-ust-ctl.h
lttng-sessiond/ust-app.c

index 687379448d11511d6c86af243b1f88d8202d129c..66c84c9ddb195e1426070973659df236b33c4896 100644 (file)
@@ -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);
index 377600f3d2f2347ce52765b43c5fbec19ceddff7..616a7ae2f50c04ebf1365bc20d218d3ec28b256e 100644 (file)
@@ -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);
This page took 0.031108 seconds and 5 git commands to generate.