X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fcmd.c;h=d882b074d54cd4f0348365ab4adb218ce263c48b;hp=bbc122152204bf4308a15f9afbe6a58dd4b587b3;hb=0e1155633b00241b8b1e5a9bb683cf91b28f5eeb;hpb=18a720cd7bbc2eeea6d075903668e21337b5d916 diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c index bbc122152..d882b074d 100644 --- a/src/bin/lttng-sessiond/cmd.c +++ b/src/bin/lttng-sessiond/cmd.c @@ -35,6 +35,7 @@ #include "kernel-consumer.h" #include "lttng-sessiond.h" #include "utils.h" +#include "syscall.h" #include "cmd.h" @@ -360,7 +361,8 @@ static int list_lttng_kernel_events(char *channel_name, 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)); @@ -407,7 +409,19 @@ static int list_lttng_kernel_events(char *channel_name, 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: @@ -1070,6 +1084,9 @@ int cmd_disable_event(struct ltt_session *session, int domain, 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; @@ -1121,6 +1138,7 @@ int cmd_disable_event(struct ltt_session *session, int domain, } case LTTNG_DOMAIN_LOG4J: case LTTNG_DOMAIN_JUL: + case LTTNG_DOMAIN_PYTHON: { struct agent *agt; struct ltt_ust_session *usess = session->ust_session; @@ -1178,9 +1196,6 @@ int disable_kevent_all(struct ltt_session *session, int domain, struct lttng_event *event) { int ret; - char *event_name; - - event_name = event->name; rcu_read_lock(); @@ -1216,7 +1231,10 @@ int disable_kevent_all(struct ltt_session *session, int domain, } 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; @@ -1445,6 +1463,9 @@ int cmd_enable_event(struct ltt_session *session, struct lttng_domain *domain, 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) { @@ -1457,6 +1478,9 @@ int cmd_enable_event(struct ltt_session *session, struct lttng_domain *domain, 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; @@ -1519,6 +1543,7 @@ int cmd_enable_event(struct ltt_session *session, struct lttng_domain *domain, } case LTTNG_DOMAIN_LOG4J: case LTTNG_DOMAIN_JUL: + case LTTNG_DOMAIN_PYTHON: { const char *default_event_name, *default_chan_name; struct agent *agt; @@ -1558,10 +1583,19 @@ int cmd_enable_event(struct ltt_session *session, struct lttng_domain *domain, 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, @@ -1663,6 +1697,9 @@ int enable_kevent_all(struct ltt_session *session, switch (event->type) { case LTTNG_EVENT_SYSCALL: ret = event_kernel_enable_syscall(kchan, ""); + if (ret != LTTNG_OK) { + goto error; + } break; case LTTNG_EVENT_TRACEPOINT: /* @@ -1730,6 +1767,7 @@ ssize_t cmd_list_tracepoints(int domain, struct lttng_event **events) 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; @@ -1778,6 +1816,11 @@ error: 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. */ @@ -2461,6 +2504,7 @@ ssize_t cmd_list_events(int domain, struct ltt_session *session, } case LTTNG_DOMAIN_LOG4J: case LTTNG_DOMAIN_JUL: + case LTTNG_DOMAIN_PYTHON: if (session->ust_session) { struct lttng_ht_iter iter; struct agent *agt; @@ -3027,6 +3071,7 @@ int cmd_snapshot_record(struct ltt_session *session, uint64_t session_max_size = 0, max_stream_size = 0; assert(session); + assert(output); DBG("Cmd snapshot record for session %s", session->name); @@ -3046,7 +3091,7 @@ int cmd_snapshot_record(struct ltt_session *session, } /* 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);