X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libust%2Ftracectl.c;h=5ccd1f5eba14b0846223f297ea78408c9af37fa0;hb=69ba01560f9193dbf4ad2fc8361efb725704807c;hp=b32b501ea9683692bbe7fb82d36b1053790b4c61;hpb=872037bb1437ab961f97834a624eb2d9b0706ab2;p=ust.git diff --git a/libust/tracectl.c b/libust/tracectl.c index b32b501..5ccd1f5 100644 --- a/libust/tracectl.c +++ b/libust/tracectl.c @@ -1,3 +1,20 @@ +/* Copyright (C) 2009 Pierre-Marc Fournier + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + #define _GNU_SOURCE #include #include @@ -14,6 +31,7 @@ #include "localerr.h" #include "ustcomm.h" #include "relay.h" /* FIXME: remove */ +#include "marker-control.h" //#define USE_CLONE @@ -146,7 +164,8 @@ void process_blocked_consumers(void) idx++; } - result = poll(fds, n_fds, 0); + while((result = poll(fds, n_fds, 0)) == -1 && errno == EINTR) + /* nothing */; if(result == -1) { PERROR("poll"); return; @@ -208,9 +227,6 @@ void *listener_main(void *p) DBG("LISTENER"); for(;;) { - uint32_t size; - struct sockaddr_un addr; - socklen_t addrlen = sizeof(addr); char trace_name[] = "auto"; char trace_type[] = "ustrelay"; char *recvbuf; @@ -347,7 +363,7 @@ void *listener_main(void *p) ltt_unlock_traces(); if(trace == NULL) { - CPRINTF("cannot find trace!"); + ERR("cannot find trace!"); return (void *)1; } @@ -355,7 +371,6 @@ void *listener_main(void *p) struct rchan *rchan = trace->channels[i].trans_channel_data; struct rchan_buf *rbuf = rchan->buf; struct ltt_channel_struct *ltt_channel = (struct ltt_channel_struct *)rchan->private_data; - struct ltt_channel_buf_struct *ltt_buf = ltt_channel->buf; if(!strcmp(trace->channels[i].channel_name, channel_name)) { char *reply; @@ -395,7 +410,7 @@ void *listener_main(void *p) ltt_unlock_traces(); if(trace == NULL) { - CPRINTF("cannot find trace!"); + ERR("cannot find trace!"); return (void *)1; } @@ -439,7 +454,7 @@ void *listener_main(void *p) ltt_unlock_traces(); if(trace == NULL) { - CPRINTF("cannot find trace!"); + ERR("cannot find trace!"); return (void *)1; } @@ -490,7 +505,7 @@ void *listener_main(void *p) ltt_unlock_traces(); if(trace == NULL) { - CPRINTF("cannot find trace!"); + ERR("cannot find trace!"); return (void *)1; } @@ -500,9 +515,6 @@ void *listener_main(void *p) if(!strcmp(trace->channels[i].channel_name, channel_name)) { struct rchan_buf *rbuf = rchan->buf; struct ltt_channel_buf_struct *lttbuf = trace->channels[i].buf; - char *reply; - long consumed_old=0; - int fd; struct blocked_consumer *bc; bc = (struct blocked_consumer *) malloc(sizeof(struct blocked_consumer)); @@ -556,7 +568,7 @@ void *listener_main(void *p) ltt_unlock_traces(); if(trace == NULL) { - CPRINTF("cannot find trace!"); + ERR("cannot find trace!"); return (void *)1; } @@ -598,7 +610,6 @@ void *listener_main(void *p) char *channel_slash_name = nth_token(recvbuf, 1); char channel_name[256]=""; char marker_name[256]=""; - struct marker_iter iter; result = sscanf(channel_slash_name, "%255[^/]/%255s", channel_name, marker_name); @@ -617,7 +628,6 @@ void *listener_main(void *p) char *channel_slash_name = nth_token(recvbuf, 1); char *marker_name; char *channel_name; - struct marker_iter iter; result = sscanf(channel_slash_name, "%a[^/]/%as", &channel_name, &marker_name); @@ -649,7 +659,7 @@ void *listener_main(void *p) // ltt_unlock_traces(); // // if(trace == NULL) { -// CPRINTF("cannot find trace!"); +// ERR("cannot find trace!"); // return (void *)1; // } // @@ -688,13 +698,11 @@ void *listener_main(void *p) } } -static char listener_stack[16384]; - void create_listener(void) { - int result; +#ifdef USE_CLONE static char listener_stack[16384]; - //char *listener_stack = malloc(16384); +#endif #ifdef USE_CLONE result = clone(listener_main, listener_stack+sizeof(listener_stack)-1, CLONE_FS | CLONE_FILES | CLONE_VM | CLONE_SIGHAND | CLONE_THREAD, NULL); @@ -734,18 +742,22 @@ static int init_socket(void) return ustcomm_init_app(getpid(), &ustcomm_app); } +/* FIXME: reenable this to delete socket file. */ + +#if 0 static void destroy_socket(void) { -// int result; -// -// if(mysocketfile[0] == '\0') -// return; -// -// result = unlink(mysocketfile); -// if(result == -1) { -// PERROR("unlink"); -// } + int result; + + if(mysocketfile[0] == '\0') + return; + + result = unlink(mysocketfile); + if(result == -1) { + PERROR("unlink"); + } } +#endif static int init_signal_handler(void) { @@ -783,8 +795,8 @@ 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"); + if(result && result != -EEXIST) + ERR("ltt_marker_connect (marker = %s/%s, errno = %d)", m->channel, m->name, -result); DBG("just auto connected marker %s %s to probe default", m->channel, m->name); } @@ -797,8 +809,6 @@ static void __attribute__((constructor(101))) init0() } } -static void fini(void); - static void __attribute__((constructor(1000))) init() { int result;