*/
#define _GNU_SOURCE
+#define _LGPL_SOURCE
#include <assert.h>
#include <inttypes.h>
#include <urcu/list.h>
#include "kernel-consumer.h"
#include "lttng-sessiond.h"
#include "utils.h"
+#include "syscall.h"
#include "cmd.h"
DBG("Listing events for channel %s", kchan->channel->name);
if (nb_event == 0) {
- goto end;
+ *events = NULL;
+ goto syscall;
}
*events = zmalloc(nb_event * sizeof(struct lttng_event));
i++;
}
-end:
+syscall:
+ if (syscall_table) {
+ ssize_t new_size;
+
+ new_size = syscall_list_channel(kchan, events, nb_event);
+ if (new_size < 0) {
+ free(events);
+ ret = -new_size;
+ goto error;
+ }
+ nb_event = new_size;
+ }
+
return nb_event;
error:
break;
case LTTNG_EVENT_SYSCALL:
ret = event_kernel_disable_syscall(kchan, event_name);
+ if (ret != LTTNG_OK) {
+ goto error;
+ }
break;
default:
ret = LTTNG_ERR_UNK;
}
case LTTNG_DOMAIN_LOG4J:
case LTTNG_DOMAIN_JUL:
+ case LTTNG_DOMAIN_PYTHON:
{
struct agent *agt;
struct ltt_ust_session *usess = session->ust_session;
struct lttng_event *event)
{
int ret;
- char *event_name;
-
- event_name = event->name;
rcu_read_lock();
}
break;
case LTTNG_EVENT_SYSCALL:
- ret = event_kernel_disable_syscall(kchan, event_name);
+ ret = event_kernel_disable_syscall(kchan, "");
+ if (ret != LTTNG_OK) {
+ goto error;
+ }
break;
default:
ret = LTTNG_ERR_UNK;
switch (event->type) {
case LTTNG_EVENT_ALL:
+ case LTTNG_EVENT_PROBE:
+ case LTTNG_EVENT_FUNCTION:
+ case LTTNG_EVENT_FUNCTION_ENTRY:
case LTTNG_EVENT_TRACEPOINT:
ret = event_kernel_enable_tracepoint(kchan, event);
if (ret != LTTNG_OK) {
break;
case LTTNG_EVENT_SYSCALL:
ret = event_kernel_enable_syscall(kchan, event->name);
+ if (ret != LTTNG_OK) {
+ goto error;
+ }
break;
default:
ret = LTTNG_ERR_UNK;
}
case LTTNG_DOMAIN_LOG4J:
case LTTNG_DOMAIN_JUL:
+ case LTTNG_DOMAIN_PYTHON:
{
const char *default_event_name, *default_chan_name;
struct agent *agt;
memcpy(&tmp_dom, domain, sizeof(tmp_dom));
tmp_dom.type = LTTNG_DOMAIN_UST;
- if (domain->type == LTTNG_DOMAIN_LOG4J) {
+ switch (domain->type) {
+ case LTTNG_DOMAIN_LOG4J:
default_chan_name = DEFAULT_LOG4J_CHANNEL_NAME;
- } else {
+ break;
+ case LTTNG_DOMAIN_JUL:
default_chan_name = DEFAULT_JUL_CHANNEL_NAME;
+ break;
+ case LTTNG_DOMAIN_PYTHON:
+ default_chan_name = DEFAULT_PYTHON_CHANNEL_NAME;
+ break;
+ default:
+ /* The switch/case we are in should avoid this else big problem */
+ assert(0);
}
ret = cmd_enable_event(session, &tmp_dom, (char *) default_chan_name,
switch (event->type) {
case LTTNG_EVENT_SYSCALL:
ret = event_kernel_enable_syscall(kchan, "");
+ if (ret != LTTNG_OK) {
+ goto error;
+ }
break;
case LTTNG_EVENT_TRACEPOINT:
/*
break;
case LTTNG_DOMAIN_LOG4J:
case LTTNG_DOMAIN_JUL:
+ case LTTNG_DOMAIN_PYTHON:
nb_events = agent_list_events(events, domain);
if (nb_events < 0) {
ret = LTTNG_ERR_UST_LIST_FAIL;
return -ret;
}
+ssize_t cmd_list_syscalls(struct lttng_event **events)
+{
+ return syscall_table_list(events);
+}
+
/*
* Command LTTNG_START_TRACE processed by the client thread.
*/
* possible to enable channel thus inform the client.
*/
if (usess && usess->domain_global.channels) {
+ rcu_read_lock();
nb_chan += lttng_ht_get_count(usess->domain_global.channels);
+ rcu_read_unlock();
}
if (ksession) {
nb_chan += ksession->channel_count;
}
}
+ if (!nb_dom) {
+ goto end;
+ }
+
*domains = zmalloc(nb_dom * sizeof(struct lttng_domain));
if (*domains == NULL) {
ret = LTTNG_ERR_FATAL;
}
}
}
-
+end:
return nb_dom;
error:
session->ust_session->domain_global.channels);
}
DBG3("Number of UST global channels %zd", nb_chan);
- if (nb_chan <= 0) {
+ if (nb_chan < 0) {
ret = LTTNG_ERR_UST_CHAN_NOT_FOUND;
+ goto error;
}
break;
default:
- *channels = NULL;
ret = LTTNG_ERR_UND;
goto error;
}
}
list_lttng_channels(domain, session, *channels);
- } else {
- *channels = NULL;
- /* Ret value was set in the domain switch case */
- goto error;
}
return nb_chan;
}
case LTTNG_DOMAIN_LOG4J:
case LTTNG_DOMAIN_JUL:
+ case LTTNG_DOMAIN_PYTHON:
if (session->ust_session) {
struct lttng_ht_iter iter;
struct agent *agt;
uint64_t session_max_size = 0, max_stream_size = 0;
assert(session);
+ assert(output);
DBG("Cmd snapshot record for session %s", session->name);
}
/* Use temporary output for the session. */
- if (output && *output->ctrl_url != '\0') {
+ if (*output->ctrl_url != '\0') {
ret = snapshot_output_init(output->max_size, output->name,
output->ctrl_url, output->data_url, session->consumer,
&tmp_output, NULL);