ust: add markers autoconnect
[ust.git] / libtracectl / tracectl.c
index 874f4149e4419dcbad50cf4272ab7961cabe8bd0..ab62adfd720aa416125b1f4ce2580f18e37ef1cc 100644 (file)
@@ -101,6 +101,8 @@ int listener_main(void *p)
                uint32_t size;
                struct sockaddr_un addr;
                socklen_t addrlen = sizeof(addr);
+               char trace_name[] = "auto";
+               char trace_type[] = "ustrelay";
 
                for(;;) {
                        struct trctl_msg msg;
@@ -112,8 +114,8 @@ int listener_main(void *p)
                                continue;
                        }
 
-                       if(recvbuf[len-2] == '\n')
-                               recvbuf[len-2] = '\0';
+                       if(recvbuf[len-1] == '\n')
+                               recvbuf[len-1] = '\0';
 
                        fprintf(stderr, "received a message! it's: %s\n", recvbuf);
 
@@ -123,15 +125,55 @@ int listener_main(void *p)
                        }
                        else if(!strcmp(recvbuf, "trace_setup")) {
                                DBG("trace setup");
+
+                               result = ltt_trace_setup(trace_name);
+                               if(result < 0) {
+                                       ERR("ltt_trace_setup failed");
+                                       return;
+                               }
+
+                               result = ltt_trace_set_type(trace_name, trace_type);
+                               if(result < 0) {
+                                       ERR("ltt_trace_set_type failed");
+                                       return;
+                               }
                        }
                        else if(!strcmp(recvbuf, "trace_alloc")) {
                                DBG("trace alloc");
+
+                               result = ltt_trace_alloc(trace_name);
+                               if(result < 0) {
+                                       ERR("ltt_trace_alloc failed");
+                                       return;
+                               }
                        }
                        else if(!strcmp(recvbuf, "trace_start")) {
                                DBG("trace start");
+
+                               result = ltt_trace_start(trace_name);
+                               if(result < 0) {
+                                       ERR("ltt_trace_start failed");
+                                       return;
+                               }
                        }
                        else if(!strcmp(recvbuf, "trace_stop")) {
                                DBG("trace stop");
+
+                               result = ltt_trace_stop(trace_name);
+                               if(result < 0) {
+                                       ERR("ltt_trace_stop failed");
+                                       return;
+                               }
+                       }
+                       else if(!strcmp(recvbuf, "trace_destroy")) {
+
+                               DBG("trace destroy");
+
+                               result = ltt_trace_destroy(trace_name);
+                               if(result < 0) {
+                                       ERR("ltt_trace_destroy failed");
+                                       return;
+                               }
                        }
                }
                next_conn:;
@@ -249,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")) {
@@ -270,9 +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");
+               /* In case. */
+               ltt_channels_register("ust");
 
                result = ltt_trace_setup(trace_name);
                if(result < 0) {
This page took 0.024444 seconds and 4 git commands to generate.