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.
goto error;
}
- rcu_read_lock();
-
switch (domain->type) {
case LTTNG_DOMAIN_KERNEL:
{
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();
/*
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;
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);
}
goto error;
}
+ /* Use the global session count for the temporary snapshot. */
+ tmp_output.nb_snapshot = session->snapshot.nb_snapshot;
use_tmp_output = 1;
}
if (ret < 0) {
goto error;
}
+ snapshot_success = 1;
} else {
struct snapshot_output *sout;
struct lttng_ht_iter iter;
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();
}
if (ret < 0) {
goto error;
}
+ snapshot_success = 1;
} else {
struct snapshot_output *sout;
struct lttng_ht_iter iter;
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;
}