add get/set commands for daemon socket path
[ust.git] / libust / tracectl.c
index ef0155db3388441d83fe3afe813f66b5e78d64e3..1b684445e63f1a2efa38bd59f0678f018adb6a9a 100644 (file)
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
+/* This file contains the implementation of the UST listener thread, which
+ * receives trace control commands. It also coordinates the initialization of
+ * libust.
+ */
+
 #define _GNU_SOURCE
 #include <stdio.h>
 #include <stdlib.h>
@@ -989,6 +994,25 @@ int process_client_cmd(char *recvbuf, struct ustcomm_source *src)
 
                free(reply);
        }
+       else if(nth_token_is(recvbuf, "get_sock_path", 0) == 1) {
+               char *reply = getenv("UST_DAEMON_SOCKET");
+               if(!reply) {
+                       asprintf(&reply, "%s/%s", SOCK_DIR, "ustd");
+                       result = ustcomm_send_reply(&ustcomm_app.server, reply, src);
+                       free(reply);
+               }
+               else {
+                       result = ustcomm_send_reply(&ustcomm_app.server, reply, src);
+               }
+               if(result)
+                       ERR("ustcomm_send_reply failed");
+       }
+       else if(nth_token_is(recvbuf, "set_sock_path", 0) == 1) {
+               char *sock_path = nth_token(recvbuf, 1);
+               result = setenv("UST_DAEMON_SOCKET", sock_path, 1);
+               if(result)
+                       ERR("cannot set UST_DAEMON_SOCKET environment variable");
+       }
        else {
                ERR("unable to parse message: %s", recvbuf);
        }
@@ -1065,8 +1089,9 @@ void create_listener(void)
        if(result) {
                PERROR("pthread_sigmask: %s", strerror(result));
        }
-
-       have_listener = 1;
+       else {
+               have_listener = 1;
+       }
 }
 
 static int init_socket(void)
@@ -1364,10 +1389,13 @@ int restarting_usleep(useconds_t usecs)
        return result;
 }
 
-static void stop_listener()
+static void stop_listener(void)
 {
        int result;
 
+       if(!have_listener)
+               return;
+
        result = pthread_cancel(listener_thread);
        if(result != 0) {
                ERR("pthread_cancel: %s", strerror(result));
This page took 0.022986 seconds and 4 git commands to generate.