implement ring buffer clients
[lttng-ust.git] / libust / ltt-events.c
index a94e8f9a1dde6a6e315133e59c66e3659455f99d..3457699f812edfaa347aec64086321b2aa341b49 100644 (file)
@@ -34,8 +34,6 @@ int _ltt_event_metadata_statedump(struct ltt_session *session,
 static
 int _ltt_session_metadata_statedump(struct ltt_session *session);
 
-
-static
 void synchronize_trace(void)
 {
        synchronize_sched();
@@ -108,12 +106,9 @@ int ltt_session_enable(struct ltt_session *session)
 
        ACCESS_ONCE(session->active) = 1;
        ACCESS_ONCE(session->been_active) = 1;
-       synchronize_trace();    /* Wait for in-flight events to complete */
        ret = _ltt_session_metadata_statedump(session);
-       if (ret) {
+       if (ret)
                ACCESS_ONCE(session->active) = 0;
-               synchronize_trace();    /* Wait for in-flight events to complete */
-       }
 end:
        mutex_unlock(&sessions_mutex);
        return ret;
@@ -129,7 +124,6 @@ int ltt_session_disable(struct ltt_session *session)
                goto end;
        }
        ACCESS_ONCE(session->active) = 0;
-       synchronize_trace();    /* Wait for in-flight events to complete */
 end:
        mutex_unlock(&sessions_mutex);
        return ret;
@@ -139,6 +133,8 @@ int ltt_channel_enable(struct ltt_channel *channel)
 {
        int old;
 
+       if (channel == channel->session->metadata)
+               return -EPERM;
        old = xchg(&channel->enabled, 1);
        if (old)
                return -EEXIST;
@@ -149,6 +145,8 @@ int ltt_channel_disable(struct ltt_channel *channel)
 {
        int old;
 
+       if (channel == channel->session->metadata)
+               return -EPERM;
        old = xchg(&channel->enabled, 0);
        if (!old)
                return -EEXIST;
@@ -159,6 +157,8 @@ int ltt_event_enable(struct ltt_event *event)
 {
        int old;
 
+       if (event->chan == event->chan->session->metadata)
+               return -EPERM;
        old = xchg(&event->enabled, 1);
        if (old)
                return -EEXIST;
@@ -169,6 +169,8 @@ int ltt_event_disable(struct ltt_event *event)
 {
        int old;
 
+       if (event->chan == event->chan->session->metadata)
+               return -EPERM;
        old = xchg(&event->enabled, 0);
        if (!old)
                return -EEXIST;
This page took 0.026841 seconds and 4 git commands to generate.