X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libtracectl%2Ftracectl.c;h=ab62adfd720aa416125b1f4ce2580f18e37ef1cc;hb=20b37a3100b0d8722b361f62fd592520264fb9fa;hp=874f4149e4419dcbad50cf4272ab7961cabe8bd0;hpb=4db647c5217c9350040c781cdca7ad4a09384337;p=ust.git diff --git a/libtracectl/tracectl.c b/libtracectl/tracectl.c index 874f414..ab62adf 100644 --- a/libtracectl/tracectl.c +++ b/libtracectl/tracectl.c @@ -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) {