ust: add markers autoconnect
authorPierre-Marc Fournier <pierre-marc.fournier@polymtl.ca>
Thu, 19 Feb 2009 05:08:48 +0000 (00:08 -0500)
committerPierre-Marc Fournier <pierre-marc.fournier@polymtl.ca>
Thu, 19 Feb 2009 05:08:48 +0000 (00:08 -0500)
hello/hello.c
libmallocwrap/Makefile
libmarkers/marker.c
libmarkers/marker.h
libtracectl/tracectl.c

index 3c4843abfa0c3bb5955be89a0ddff6d577a5dad3..67b9ef3a9f56f1455e2f43026d46e816d34ed792 100644 (file)
@@ -204,8 +204,8 @@ int main()
 
        sleep(1);
        for(i=0; i<50; i++) {
-               trace_mark(foo, bar, "str %s", "FOOBAZ");
-               trace_mark(foo, bar2, "number1 %d number2 %d", 53, 9800);
+               trace_mark(ust, bar, "str %s", "FOOBAZ");
+               trace_mark(ust, bar2, "number1 %d number2 %d", 53, 9800);
                usleep(100000);
        }
 
index 6f12740db6028cb3a9918a7548bcda3fbbadeeed..d5890a71b022bb207d82e81e6d646b1630a5c8ec 100644 (file)
@@ -1,6 +1,6 @@
 all: libmallocwrap.so
 
 libmallocwrap.so: mallocwrap.c
-       gcc -shared -fPIC -g -I../share -I../libmarkers -I../libtracing -I../libtracectl -L../libmarkers -L../libtracing -L../libtracectl -ldl -lmarkers -o libmallocwrap.so mallocwrap.c
+       gcc -shared -fPIC -g -I../share -I../libmarkers -I../libtracing -I../libtracectl -L../libmarkers -L../libtracing -L../libtracectl $(CFLAGS) -ldl -lmarkers -o libmallocwrap.so mallocwrap.c
 
 .PHONY: libmallocwrap.so
index e1b62c7f64d908269a399ecf9dfd11ba00894252..43dfff7f58d38a5e06506d5a9c73d6b130e6229f 100644 (file)
@@ -1471,6 +1471,23 @@ void lib_update_markers(void)
 //ust//        mutex_unlock(&module_mutex);
 }
 
+static void (*new_marker_cb)(struct marker *) = NULL;
+
+void marker_set_new_marker_cb(void (*cb)(struct marker *))
+{
+       new_marker_cb = cb;
+}
+
+static void new_markers(struct marker *start, struct marker *end)
+{
+       if(new_marker_cb) {
+               struct marker *m;
+               for(m=start; m < end; m++) {
+                       new_marker_cb(m);
+               }
+       }
+}
+
 int marker_register_lib(struct marker *markers_start, int markers_count)
 {
        struct lib *pl;
@@ -1482,6 +1499,8 @@ int marker_register_lib(struct marker *markers_start, int markers_count)
 
        list_add(&pl->list, &libs);
 
+       new_markers(markers_start, markers_start + markers_count);
+
        /* FIXME: update just the loaded lib */
        lib_update_markers();
 
index aebe27a975c9bfa7eb171c93c6c8d1144267c120..62954e1c3f94a43c511164459ac76073c1fd73f4 100644 (file)
@@ -294,3 +294,5 @@ static void __attribute__((constructor)) __markers__init(void)                              \
 }
 
 #endif
+
+void marker_set_new_marker_cb(void (*cb)(struct marker *));
index 2c64c10e420366879d74cdf2330620cc39b1d285..ab62adfd720aa416125b1f4ce2580f18e37ef1cc 100644 (file)
@@ -291,10 +291,31 @@ static int init_signal_handler(void)
        return 0;
 }
 
-static void __attribute__((constructor)) init()
+static void auto_probe_connect(struct marker *m)
 {
        int result;
 
+       result = ltt_marker_connect(m->channel, m->name, "default");
+       if(result)
+               ERR("ltt_marker_connect");
+
+       DBG("just auto connected marker %s %s to probe default", m->channel, m->name);
+}
+
+static void __attribute__((constructor(101))) init0()
+{
+       DBG("UST_AUTOPROBE constructor");
+       if(getenv("UST_AUTOPROBE")) {
+               marker_set_new_marker_cb(auto_probe_connect);
+       }
+}
+
+static void __attribute__((constructor(1000))) init()
+{
+       int result;
+
+       DBG("UST_TRACE constructor");
+
        mypid = getpid();
 
        if(getenv("UST_TRACE")) {
@@ -312,13 +333,8 @@ static void __attribute__((constructor)) init()
                /* Ensure markers are initialized */
                init_markers();
 
-               result = ltt_marker_connect("foo", "bar", "default");
-               if(result)
-                       ERR("ltt_marker_connect");
-
-               result = ltt_marker_connect("foo", "bar2", "default");
-               if(result)
-                       ERR("ltt_marker_connect");
+               /* In case. */
+               ltt_channels_register("ust");
 
                result = ltt_trace_setup(trace_name);
                if(result < 0) {
This page took 0.029085 seconds and 4 git commands to generate.