Add ust create trace feature
[lttng-tools.git] / lttng / lttng.c
index b08ecfed8af6debe14aeff7d4f35eb691cc42cd5..3878fb8367614654d1e837951c121024803e8366 100644 (file)
@@ -56,6 +56,7 @@ static int set_signal_handler(void);
 static int process_client_opt(void)
 {
        int ret;
 static int process_client_opt(void)
 {
        int ret;
+       uuid_t uuid;
 
        /* Connect to the session daemon */
        ret = lttng_connect_sessiond();
 
        /* Connect to the session daemon */
        ret = lttng_connect_sessiond();
@@ -84,6 +85,27 @@ static int process_client_opt(void)
                }
        }
 
                }
        }
 
+       if (opt_destroy_session != NULL) {
+               uuid_parse(opt_destroy_session, uuid);
+               ret = lttng_destroy_session(&uuid);
+               if (ret < 0) {
+                       goto end;
+               }
+       }
+
+       if (opt_session_uuid != NULL) {
+               lttng_set_current_session_uuid(opt_session_uuid);
+       }
+
+       if (opt_create_trace) {
+               DBG("Create trace for pid %d", opt_create_trace);
+               ret = lttng_ust_create_trace(opt_create_trace);
+               if (ret < 0) {
+                       goto end;
+               }
+               MSG("Trace created successfully!\nUse --start PID to start tracing");
+       }
+
        return 0;
 
 end:
        return 0;
 
 end:
@@ -100,15 +122,18 @@ end:
 static int process_opt_create_session(void)
 {
        int ret;
 static int process_opt_create_session(void)
 {
        int ret;
-       char *session_id;
+       uuid_t session_id;
+       char str_uuid[37];
 
        ret = lttng_create_session(opt_create_session, &session_id);
        if (ret < 0) {
                goto error;
        }
 
 
        ret = lttng_create_session(opt_create_session, &session_id);
        if (ret < 0) {
                goto error;
        }
 
+       uuid_unparse(session_id, str_uuid);
+
        MSG("Session created:");
        MSG("Session created:");
-       MSG("    %s (%s)", opt_create_session, session_id);
+       MSG("    %s (%s)", opt_create_session, str_uuid);
 
 error:
        return ret;
 
 error:
        return ret;
@@ -341,6 +366,9 @@ static void sighandler(int sig)
 void clean_exit(int code)
 {
        DBG("Clean exit");
 void clean_exit(int code)
 {
        DBG("Clean exit");
+       if (lttng_disconnect_sessiond() < 0) {
+               ERR("Session daemon disconnect failed.");
+       }
        exit(code);
 }
 
        exit(code);
 }
 
@@ -360,12 +388,12 @@ int main(int argc, char *argv[])
 
        ret = parse_args(argc, (const char **) argv);
        if (ret < 0) {
 
        ret = parse_args(argc, (const char **) argv);
        if (ret < 0) {
-               return EXIT_FAILURE;
+               clean_exit(EXIT_FAILURE);
        }
 
        ret = set_signal_handler();
        if (ret < 0) {
        }
 
        ret = set_signal_handler();
        if (ret < 0) {
-               return ret;
+               clean_exit(ret);
        }
 
        if (opt_tracing_group != NULL) {
        }
 
        if (opt_tracing_group != NULL) {
@@ -378,7 +406,7 @@ int main(int argc, char *argv[])
                DBG("Kernel tracing activated");
                if (getuid() != 0) {
                        ERR("%s must be setuid root", progname);
                DBG("Kernel tracing activated");
                if (getuid() != 0) {
                        ERR("%s must be setuid root", progname);
-                       return -EPERM;
+                       clean_exit(-EPERM);
                }
        }
 
                }
        }
 
@@ -386,13 +414,15 @@ int main(int argc, char *argv[])
         * If no, a daemon will be spawned.
         */
        if (opt_no_sessiond == 0 && (check_ltt_sessiond() < 0)) {
         * If no, a daemon will be spawned.
         */
        if (opt_no_sessiond == 0 && (check_ltt_sessiond() < 0)) {
-               return EXIT_FAILURE;
+               clean_exit(EXIT_FAILURE);
        }
 
        ret = process_client_opt();
        if (ret < 0) {
        }
 
        ret = process_client_opt();
        if (ret < 0) {
-               return ret;
+               clean_exit(ret);
        }
 
        }
 
+       clean_exit(0);
+
        return 0;
 }
        return 0;
 }
This page took 0.023834 seconds and 4 git commands to generate.