From 2944a62989b8466e0d551e37a0be0e8e6cd69905 Mon Sep 17 00:00:00 2001 From: Pierre-Marc Fournier Date: Tue, 13 Oct 2009 17:47:24 -0400 Subject: [PATCH] immediately create listener thread on process creation It is complex to create a thread properly inside a signal handler. Leave this aside for now. This optimization can always be added later. --- libust/tracectl.c | 57 ++------------------------------------------ libustcomm/ustcomm.c | 13 +--------- 2 files changed, 3 insertions(+), 67 deletions(-) diff --git a/libust/tracectl.c b/libust/tracectl.c index 2d4341d..d4cd594 100644 --- a/libust/tracectl.c +++ b/libust/tracectl.c @@ -798,61 +798,11 @@ void create_listener(void) have_listener = 1; } -/* The signal handler itself. Signals must be setup so there cannot be - nested signals. */ - -void sighandler(int sig) -{ - DBG("sighandler"); - - if(!have_listener) { - create_listener(); - } -} - -/* Called by the app signal handler to chain it to us. */ - -void chain_signal(void) -{ - sighandler(USTSIGNAL); -} - static int init_socket(void) { return ustcomm_init_app(getpid(), &ustcomm_app); } -static int init_signal_handler(void) -{ - /* Attempt to handler SIGIO. If the main program wants to - * handle it, fine, it'll override us. They it'll have to - * use the chaining function. - */ - - int result; - struct sigaction act; - - result = sigemptyset(&act.sa_mask); - if(result == -1) { - PERROR("sigemptyset"); - return -1; - } - - act.sa_handler = sighandler; - act.sa_flags = SA_RESTART; - - /* Only defer ourselves. Also, try to restart interrupted - * syscalls to disturb the traced program as little as possible. - */ - result = sigaction(SIGIO, &act, NULL); - if(result == -1) { - PERROR("sigaction"); - return -1; - } - - return 0; -} - #define AUTOPROBE_DISABLED 0 #define AUTOPROBE_ENABLE_ALL 1 #define AUTOPROBE_ENABLE_REGEX 2 @@ -916,11 +866,8 @@ static void __attribute__((constructor)) init() ERR("init_socket error"); return; } - result = init_signal_handler(); - if(result == -1) { - ERR("init_signal_handler error"); - return; - } + + create_listener(); autoprobe_val = getenv("UST_AUTOPROBE"); if(autoprobe_val) { diff --git a/libustcomm/ustcomm.c b/libustcomm/ustcomm.c index 6044c27..1b6843b 100644 --- a/libustcomm/ustcomm.c +++ b/libustcomm/ustcomm.c @@ -67,22 +67,11 @@ char *strdup_malloc(const char *s) static int signal_process(pid_t pid) { - int result; - - result = kill(pid, UST_SIGNAL); - if(result == -1) { - PERROR("kill"); - return -1; - } - - /* FIXME: should wait in a better way */ - //sleep(1); - return 0; } int pid_is_online(pid_t pid) { - return kill(pid, UST_SIGNAL) != -1; + return 1; } static int send_message_fd(int fd, const char *msg) -- 2.34.1