Fix flush buffer after wait quiescent
authorDavid Goulet <david.goulet@polymtl.ca>
Mon, 12 Dec 2011 17:56:29 +0000 (12:56 -0500)
committerDavid Goulet <david.goulet@polymtl.ca>
Mon, 12 Dec 2011 17:56:29 +0000 (12:56 -0500)
Signed-off-by: David Goulet <david.goulet@polymtl.ca>
lttng-sessiond/ust-app.c

index 73dc770c9391f3fac295d6e16b58fcfefa195ac9..6de177564a0c53b38af847b3453c72e740301cf1 100644 (file)
@@ -1944,6 +1944,17 @@ int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app)
                goto error_rcu_unlock;
        }
 
                goto error_rcu_unlock;
        }
 
+       /* This inhibits UST tracing */
+       ret = ustctl_stop_session(app->key.sock, ua_sess->handle);
+       if (ret < 0) {
+               ERR("Error stopping tracing for app pid: %d", app->key.pid);
+               goto error_rcu_unlock;
+       }
+
+       /* Quiescent wait after stopping trace */
+       ustctl_wait_quiescent(app->key.sock);
+
+       /* Flushing buffers */
        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) {
        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) {
@@ -1955,18 +1966,6 @@ int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app)
                }
        }
 
                }
        }
 
-       /* This inhibits UST tracing */
-       ret = ustctl_stop_session(app->key.sock, ua_sess->handle);
-       if (ret < 0) {
-               ERR("Error stopping tracing for app pid: %d", app->key.pid);
-               goto error_rcu_unlock;
-       }
-
-       rcu_read_unlock();
-
-       /* 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) {
        /* Flush all buffers before stopping */
        ret = ustctl_sock_flush_buffer(app->key.sock, ua_sess->metadata->obj);
        if (ret < 0) {
@@ -1974,6 +1973,8 @@ int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app)
                ERR("Ended with ret %d", ret);
        }
 
                ERR("Ended with ret %d", ret);
        }
 
+       rcu_read_unlock();
+
        return 0;
 
 error_rcu_unlock:
        return 0;
 
 error_rcu_unlock:
This page took 0.030486 seconds and 4 git commands to generate.