libust: New transport mutex v2
[ust.git] / libust / tracer.c
index eb44f5459280c7c053417007b36285aede2702ce..ffcc2e74926996257ef7531fa622c1ee9179c0c9 100644 (file)
@@ -182,7 +182,8 @@ static enum ltt_channels get_channel_type_from_name(const char *name)
 //ust// }
 
 static CDS_LIST_HEAD(ltt_transport_list);
-
+/* transport mutex, nests inside traces mutex (ltt_lock_traces) */
+static DEFINE_MUTEX(ltt_transport_mutex);
 /**
  * ltt_transport_register - LTT transport registration
  * @transport: transport structure
@@ -204,9 +205,9 @@ void ltt_transport_register(struct ltt_transport *transport)
         */
 //ust//        vmalloc_sync_all();
 
-       ltt_lock_traces();
+       pthread_mutex_lock(&ltt_transport_mutex);
        cds_list_add_tail(&transport->node, &ltt_transport_list);
-       ltt_unlock_traces();
+       pthread_mutex_unlock(&ltt_transport_mutex);
 }
 
 /**
@@ -215,9 +216,9 @@ void ltt_transport_register(struct ltt_transport *transport)
  */
 void ltt_transport_unregister(struct ltt_transport *transport)
 {
-       ltt_lock_traces();
+       pthread_mutex_lock(&ltt_transport_mutex);
        cds_list_del(&transport->node);
-       ltt_unlock_traces();
+       pthread_mutex_unlock(&ltt_transport_mutex);
 }
 
 static inline int is_channel_overwrite(enum ltt_channels chan,
@@ -458,12 +459,15 @@ int ltt_trace_set_type(const char *trace_name, const char *trace_type)
                goto traces_error;
        }
 
+       pthread_mutex_lock(&ltt_transport_mutex);
        cds_list_for_each_entry(tran_iter, &ltt_transport_list, node) {
                if (!strcmp(tran_iter->name, trace_type)) {
                        transport = tran_iter;
                        break;
                }
        }
+       pthread_mutex_unlock(&ltt_transport_mutex);
+
        if (!transport) {
                ERR("Transport %s is not present", trace_type);
                err = -EINVAL;
@@ -795,9 +799,6 @@ static void __ltt_trace_destroy(struct ust_trace *trace, int drop)
                }
        }
 
-       return; /* FIXME: temporary for ust */
-//ust//        flush_scheduled_work();
-
        /*
         * The currently destroyed trace is not in the trace list anymore,
         * so it's safe to call the async wakeup ourself. It will deliver
@@ -905,11 +906,11 @@ int ltt_trace_start(const char *trace_name)
        ltt_unlock_traces();
 
        /*
-        * Call the kernel state dump.
-        * Events will be mixed with real kernel events, it's ok.
+        * Call the process-wide state dump.
         * Notice that there is no protection on the trace : that's exactly
         * why we iterate on the list and check for trace equality instead of
-        * directly using this trace handle inside the logging function.
+        * directly using this trace handle inside the logging function: we want
+        * to record events only in a single trace in the trace session list.
         */
 
        ltt_dump_marker_state(trace);
This page took 0.036124 seconds and 4 git commands to generate.