Add the number of snapshot taken to the output path
[lttng-tools.git] / src / bin / lttng-sessiond / cmd.c
index 850bac508fb4972793c5991050d5c39f56a3f9fd..f55c772c147aafbcc2a3914d4a49746b848cdafc 100644 (file)
@@ -857,6 +857,8 @@ int cmd_enable_channel(struct ltt_session *session,
 
        DBG("Enabling channel %s for session %s", attr->name, session->name);
 
+       rcu_read_lock();
+
        /*
         * Don't try to enable a channel if the session has been started at
         * some point in time before. The tracer does not allow it.
@@ -866,8 +868,6 @@ int cmd_enable_channel(struct ltt_session *session,
                goto error;
        }
 
-       rcu_read_lock();
-
        switch (domain->type) {
        case LTTNG_DOMAIN_KERNEL:
        {
@@ -2279,14 +2279,11 @@ int cmd_snapshot_del_output(struct ltt_session *session,
                struct lttng_snapshot_output *output)
 {
        int ret;
-       struct snapshot_output *sout;
+       struct snapshot_output *sout = NULL;
 
        assert(session);
        assert(output);
 
-       DBG("Cmd snapshot del output id %" PRIu32 " for session %s", output->id,
-                       session->name);
-
        rcu_read_lock();
 
        /*
@@ -2298,7 +2295,15 @@ int cmd_snapshot_del_output(struct ltt_session *session,
                goto error;
        }
 
-       sout = snapshot_find_output_by_id(output->id, &session->snapshot);
+       if (output->id) {
+               DBG("Cmd snapshot del output id %" PRIu32 " for session %s", output->id,
+                               session->name);
+               sout = snapshot_find_output_by_id(output->id, &session->snapshot);
+       } else if (*output->name != '\0') {
+               DBG("Cmd snapshot del output name %s for session %s", output->name,
+                               session->name);
+               sout = snapshot_find_output_by_name(output->name, &session->snapshot);
+       }
        if (!sout) {
                ret = LTTNG_ERR_INVALID;
                goto error;
@@ -2579,7 +2584,7 @@ int cmd_snapshot_record(struct ltt_session *session,
        int ret = LTTNG_OK;
        unsigned int use_tmp_output = 0;
        struct snapshot_output tmp_output;
-       unsigned int nb_streams;
+       unsigned int nb_streams, snapshot_success = 0;
 
        assert(session);
 
@@ -2613,6 +2618,8 @@ int cmd_snapshot_record(struct ltt_session *session,
                        }
                        goto error;
                }
+               /* Use the global session count for the temporary snapshot. */
+               tmp_output.nb_snapshot = session->snapshot.nb_snapshot;
                use_tmp_output = 1;
        }
 
@@ -2631,6 +2638,7 @@ int cmd_snapshot_record(struct ltt_session *session,
                        if (ret < 0) {
                                goto error;
                        }
+                       snapshot_success = 1;
                } else {
                        struct snapshot_output *sout;
                        struct lttng_ht_iter iter;
@@ -2656,12 +2664,15 @@ int cmd_snapshot_record(struct ltt_session *session,
                                                        sizeof(tmp_output.name));
                                }
 
+                               tmp_output.nb_snapshot = session->snapshot.nb_snapshot;
+
                                ret = record_kernel_snapshot(ksess, &tmp_output,
                                                session, wait, nb_streams);
                                if (ret < 0) {
                                        rcu_read_unlock();
                                        goto error;
                                }
+                               snapshot_success = 1;
                        }
                        rcu_read_unlock();
                }
@@ -2676,6 +2687,7 @@ int cmd_snapshot_record(struct ltt_session *session,
                        if (ret < 0) {
                                goto error;
                        }
+                       snapshot_success = 1;
                } else {
                        struct snapshot_output *sout;
                        struct lttng_ht_iter iter;
@@ -2703,17 +2715,24 @@ int cmd_snapshot_record(struct ltt_session *session,
                                                        sizeof(tmp_output.name));
                                }
 
+                               tmp_output.nb_snapshot = session->snapshot.nb_snapshot;
+
                                ret = record_ust_snapshot(usess, &tmp_output, session,
                                                wait, nb_streams);
                                if (ret < 0) {
                                        rcu_read_unlock();
                                        goto error;
                                }
+                               snapshot_success = 1;
                        }
                        rcu_read_unlock();
                }
        }
 
+       if (snapshot_success) {
+               session->snapshot.nb_snapshot++;
+       }
+
 error:
        return ret;
 }
This page took 0.02584 seconds and 5 git commands to generate.