Fix: wait for the completion of implicit session rotations
[lttng-tools.git] / src / bin / lttng / commands / destroy.c
index 661c0a2356ae42acdf7dfb0fbd047a7bff45e5b0..77acb180f8b8d91ee44bfd6249f86c4c8cc696b1 100644 (file)
@@ -35,6 +35,12 @@ static char *opt_session_name;
 static int opt_destroy_all;
 static int opt_no_wait;
 
+#ifdef LTTNG_EMBED_HELP
+static const char help_msg[] =
+#include <lttng-destroy.1.h>
+;
+#endif
+
 /* Mi writer */
 static struct mi_writer *writer;
 
@@ -52,24 +58,6 @@ static struct poptOption long_options[] = {
        {0, 0, 0, 0, 0, 0, 0}
 };
 
-/*
- * usage
- */
-static void usage(FILE *ofp)
-{
-       fprintf(ofp, "usage: lttng destroy [NAME] [OPTIONS]\n");
-       fprintf(ofp, "\n");
-       fprintf(ofp, "Where NAME is an optional session name. If not specified, lttng will\n");
-       fprintf(ofp, "get it from the configuration directory (.lttng).\n");
-       fprintf(ofp, "\n");
-       fprintf(ofp, "Options:\n");
-       fprintf(ofp, "  -h, --help           Show this help\n");
-       fprintf(ofp, "  -a, --all            Destroy all sessions\n");
-       fprintf(ofp, "      --list-options   Simple listing of options\n");
-       fprintf(ofp, "  -n, --no-wait        Don't wait for data availability\n");
-       fprintf(ofp, "\n");
-}
-
 /*
  * destroy_session
  *
@@ -88,8 +76,8 @@ static int destroy_session(struct lttng_session *session)
        }
        session_was_stopped = ret == -LTTNG_ERR_TRACE_ALREADY_STOPPED;
        if (!opt_no_wait) {
-               _MSG("Waiting for data availability");
-               fflush(stdout);
+               bool printed_wait_msg = false;
+
                do {
                        ret = lttng_data_pending(session->name);
                        if (ret < 0) {
@@ -102,12 +90,20 @@ static int destroy_session(struct lttng_session *session)
                         * returned value indicates availability.
                         */
                        if (ret) {
+                               if (!printed_wait_msg) {
+                                       _MSG("Waiting for data availability");
+                                       fflush(stdout);
+                               }
+
+                               printed_wait_msg = true;
                                usleep(DEFAULT_DATA_AVAILABILITY_WAIT_TIME);
                                _MSG(".");
                                fflush(stdout);
                        }
                } while (ret != 0);
-               MSG("");
+               if (printed_wait_msg) {
+                       MSG("");
+               }
        }
        if (!session_was_stopped) {
                /*
@@ -117,7 +113,7 @@ static int destroy_session(struct lttng_session *session)
                print_session_stats(session->name);
        }
 
-       ret = lttng_destroy_session_no_wait(session->name);
+       ret = lttng_destroy_session(session->name);
        if (ret < 0) {
                goto error;
        }
@@ -178,6 +174,7 @@ int cmd_destroy(int argc, const char **argv)
        int ret = CMD_SUCCESS , i, command_ret = CMD_SUCCESS, success = 1;
        static poptContext pc;
        char *session_name = NULL;
+       const char *leftover = NULL;
 
        struct lttng_session *sessions;
        int count;
@@ -195,7 +192,6 @@ int cmd_destroy(int argc, const char **argv)
                        list_cmd_options(stdout, long_options);
                        break;
                default:
-                       usage(stderr);
                        ret = CMD_UNDEFINED;
                        break;
                }
@@ -237,7 +233,8 @@ int cmd_destroy(int argc, const char **argv)
        /* Recuperate all sessions for further operation */
        count = lttng_list_sessions(&sessions);
        if (count < 0) {
-               command_ret = count;
+               ERR("%s", lttng_strerror(count));
+               command_ret = CMD_ERROR;
                success = 0;
                goto mi_closing;
        }
@@ -284,6 +281,14 @@ int cmd_destroy(int argc, const char **argv)
                }
        }
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               success = 0;
+               goto mi_closing;
+       }
+
 mi_closing:
        /* Mi closing */
        if (lttng_opt_mi) {
This page took 0.026713 seconds and 5 git commands to generate.