if (session->consumer_fds_sent == 0 && session->consumer != NULL) {
cds_lfht_for_each_entry(session->consumer->socks->ht, &iter.iter,
socket, node.node) {
- /* Code flow error */
- assert(socket->fd >= 0);
-
pthread_mutex_lock(socket->lock);
ret = kernel_consumer_send_session(socket, session);
pthread_mutex_unlock(socket->lock);
/* For each consumer socket, send relayd sockets */
cds_lfht_for_each_entry(usess->consumer->socks->ht, &iter.iter,
socket, node.node) {
- /* Code flow error */
- assert(socket->fd >= 0);
-
pthread_mutex_lock(socket->lock);
ret = send_consumer_relayd_sockets(LTTNG_DOMAIN_UST, session->id,
usess->consumer, socket);
&& ksess->consumer->enabled) {
cds_lfht_for_each_entry(ksess->consumer->socks->ht, &iter.iter,
socket, node.node) {
- /* Code flow error */
- assert(socket->fd >= 0);
-
pthread_mutex_lock(socket->lock);
ret = send_consumer_relayd_sockets(LTTNG_DOMAIN_KERNEL, session->id,
ksess->consumer, socket);
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.
- */
- if (session->started) {
- ret = LTTNG_ERR_TRACE_ALREADY_STARTED;
- goto error;
- }
-
switch (domain->type) {
case LTTNG_DOMAIN_KERNEL:
{
kchan = trace_kernel_get_channel_by_name(attr->name,
session->kernel_session);
if (kchan == NULL) {
+ /*
+ * Don't try to create a channel if the session
+ * has been started at some point in time
+ * before. The tracer does not allow it.
+ */
+ if (session->started) {
+ ret = LTTNG_ERR_TRACE_ALREADY_STARTED;
+ goto error;
+ }
ret = channel_kernel_create(session->kernel_session, attr, wpipe);
+ if (attr->name[0] != '\0') {
+ session->kernel_session->has_non_default_channel = 1;
+ }
} else {
ret = channel_kernel_enable(session->kernel_session, kchan);
}
uchan = trace_ust_find_channel_by_name(chan_ht, attr->name);
if (uchan == NULL) {
+ /*
+ * Don't try to create a channel if the session
+ * has been started at some point in time
+ * before. The tracer does not allow it.
+ */
+ if (session->started) {
+ ret = LTTNG_ERR_TRACE_ALREADY_STARTED;
+ goto error;
+ }
ret = channel_ust_create(usess, attr, domain->buf_type);
+ if (attr->name[0] != '\0') {
+ usess->has_non_default_channel = 1;
+ }
} else {
ret = channel_ust_enable(usess, uchan);
}
ksess = session->kernel_session;
+ /*
+ * If a non-default channel has been created in the
+ * session, explicitely require that -c chan_name needs
+ * to be provided.
+ */
+ if (ksess->has_non_default_channel && channel_name[0] == '\0') {
+ ret = LTTNG_ERR_NEED_CHANNEL_NAME;
+ goto error;
+ }
+
kchan = trace_kernel_get_channel_by_name(channel_name, ksess);
if (kchan == NULL) {
ret = LTTNG_ERR_KERN_CHAN_NOT_FOUND;
usess = session->ust_session;
+ /*
+ * If a non-default channel has been created in the
+ * session, explicitely require that -c chan_name needs
+ * to be provided.
+ */
+ if (usess->has_non_default_channel && channel_name[0] == '\0') {
+ ret = LTTNG_ERR_NEED_CHANNEL_NAME;
+ goto error;
+ }
+
uchan = trace_ust_find_channel_by_name(usess->domain_global.channels,
channel_name);
if (uchan == NULL) {
ksess = session->kernel_session;
+ /*
+ * If a non-default channel has been created in the
+ * session, explicitely require that -c chan_name needs
+ * to be provided.
+ */
+ if (ksess->has_non_default_channel && channel_name[0] == '\0') {
+ ret = LTTNG_ERR_NEED_CHANNEL_NAME;
+ goto error;
+ }
+
kchan = trace_kernel_get_channel_by_name(channel_name, ksess);
if (kchan == NULL) {
ret = LTTNG_ERR_KERN_CHAN_NOT_FOUND;
usess = session->ust_session;
+ /*
+ * If a non-default channel has been created in the
+ * session, explicitely require that -c chan_name needs
+ * to be provided.
+ */
+ if (usess->has_non_default_channel && channel_name[0] == '\0') {
+ ret = LTTNG_ERR_NEED_CHANNEL_NAME;
+ goto error;
+ }
+
uchan = trace_ust_find_channel_by_name(usess->domain_global.channels,
channel_name);
if (uchan == NULL) {
}
chan_kern_created = 1;
}
-
/* Add kernel context to kernel tracer */
ret = context_kernel_add(session->kernel_session, ctx, channel_name);
if (ret != LTTNG_OK) {
case LTTNG_DOMAIN_UST:
{
struct ltt_ust_session *usess = session->ust_session;
+ unsigned int chan_count;
+
assert(usess);
- unsigned int chan_count =
- lttng_ht_get_count(usess->domain_global.channels);
+ chan_count = lttng_ht_get_count(usess->domain_global.channels);
if (chan_count == 0) {
struct lttng_channel *attr;
/* Create default channel */
{
struct ltt_kernel_channel *kchan;
+ /*
+ * If a non-default channel has been created in the
+ * session, explicitely require that -c chan_name needs
+ * to be provided.
+ */
+ if (session->kernel_session->has_non_default_channel
+ && channel_name[0] == '\0') {
+ ret = LTTNG_ERR_NEED_CHANNEL_NAME;
+ goto error;
+ }
+
kchan = trace_kernel_get_channel_by_name(channel_name,
session->kernel_session);
if (kchan == NULL) {
assert(usess);
+ /*
+ * If a non-default channel has been created in the
+ * session, explicitely require that -c chan_name needs
+ * to be provided.
+ */
+ if (usess->has_non_default_channel && channel_name[0] == '\0') {
+ ret = LTTNG_ERR_NEED_CHANNEL_NAME;
+ goto error;
+ }
+
/* Get channel from global UST domain */
uchan = trace_ust_find_channel_by_name(usess->domain_global.channels,
channel_name);
assert(session->kernel_session);
+ /*
+ * If a non-default channel has been created in the
+ * session, explicitely require that -c chan_name needs
+ * to be provided.
+ */
+ if (session->kernel_session->has_non_default_channel
+ && channel_name[0] == '\0') {
+ ret = LTTNG_ERR_NEED_CHANNEL_NAME;
+ goto error;
+ }
+
kchan = trace_kernel_get_channel_by_name(channel_name,
session->kernel_session);
if (kchan == NULL) {
assert(usess);
+ /*
+ * If a non-default channel has been created in the
+ * session, explicitely require that -c chan_name needs
+ * to be provided.
+ */
+ if (usess->has_non_default_channel && channel_name[0] == '\0') {
+ ret = LTTNG_ERR_NEED_CHANNEL_NAME;
+ goto error;
+ }
+
/* Get channel from global UST domain */
uchan = trace_ust_find_channel_by_name(usess->domain_global.channels,
channel_name);
ret = LTTNG_ERR_CONNECT_FAIL;
goto error;
}
+ cdata->cmd_sock = sock;
- socket = consumer_allocate_socket(sock);
+ socket = consumer_allocate_socket(&cdata->cmd_sock);
if (socket == NULL) {
ret = close(sock);
if (ret < 0) {
PERROR("close register consumer");
}
+ cdata->cmd_sock = -1;
ret = LTTNG_ERR_FATAL;
goto error;
}
/*
* Command LTTNG_DATA_PENDING returning 0 if the data is NOT pending meaning
- * ready for trace analysis (or anykind of reader) or else 1 for pending data.
+ * ready for trace analysis (or any kind of reader) or else 1 for pending data.
*/
int cmd_data_pending(struct ltt_session *session)
{
DBG("Cmd snapshot add output for session %s", session->name);
/*
- * Persmission denied to create an output if the session is not set in no
- * output mode.
+ * Permission denied to create an output if the session is not
+ * set in no output mode.
*/
if (session->output_traces) {
ret = LTTNG_ERR_EPERM;
rcu_read_lock();
/*
- * Persmission denied to create an output if the session is not set in no
- * output mode.
+ * Permission denied to create an output if the session is not
+ * set in no output mode.
*/
if (session->output_traces) {
ret = LTTNG_ERR_EPERM;
DBG("Cmd snapshot list outputs for session %s", session->name);
/*
- * Persmission denied to create an output if the session is not set in no
- * output mode.
+ * Permission denied to create an output if the session is not
+ * set in no output mode.
*/
if (session->output_traces) {
ret = LTTNG_ERR_EPERM;
}
ret = kernel_snapshot_record(ksess, output, wait, nb_streams);
- if (ret < 0) {
- ret = LTTNG_ERR_SNAPSHOT_FAIL;
- if (ret == -EINVAL) {
- ret = LTTNG_ERR_INVALID;
- }
+ if (ret != LTTNG_OK) {
goto error_snapshot;
}
}
/*
- * Copy kernel session sockets so we can communicate with the right
+ * Copy UST session sockets so we can communicate with the right
* consumer for the snapshot record command.
*/
ret = consumer_copy_sockets(output->consumer, usess->consumer);
ret = ust_app_snapshot_record(usess, output, wait, nb_streams);
if (ret < 0) {
- ret = LTTNG_ERR_SNAPSHOT_FAIL;
if (ret == -EINVAL) {
ret = LTTNG_ERR_INVALID;
+ goto error_snapshot;
}
+
+ ret = LTTNG_ERR_SNAPSHOT_FAIL;
goto error_snapshot;
}
DBG("Cmd snapshot record for session %s", session->name);
/*
- * Persmission denied to create an output if the session is not set in no
- * output mode.
+ * Permission denied to create an output if the session is not
+ * set in no output mode.
*/
if (session->output_traces) {
ret = LTTNG_ERR_EPERM;
memset(&tmp_output, 0, sizeof(tmp_output));
memcpy(&tmp_output, sout, sizeof(tmp_output));
- fprintf(stderr, "Name: %s\n", output->name);
-
/* Use temporary max size. */
if (output->max_size != (uint64_t) -1ULL) {
tmp_output.max_size = output->max_size;
if (snapshot_success) {
session->snapshot.nb_snapshot++;
+ } else {
+ ret = LTTNG_ERR_SNAPSHOT_FAIL;
}
error: