Save filter expression as part of agent events and save them
[lttng-tools.git] / src / bin / lttng-sessiond / event.c
index 32efcdbf210ee5d5a2b5d99cdfcf2a2a2f1e4279..223a13d0e92eceff598fd59363fc3c2753deaa6a 100644 (file)
@@ -143,6 +143,9 @@ int event_kernel_enable_event(struct ltt_kernel_channel *kchan,
        if (kevent == NULL) {
                ret = kernel_create_event(event, kchan,
                        filter_expression, filter);
+               /* We have passed ownership */
+               filter_expression = NULL;
+               filter = NULL;
                if (ret < 0) {
                        switch (-ret) {
                        case EEXIST:
@@ -171,6 +174,8 @@ int event_kernel_enable_event(struct ltt_kernel_channel *kchan,
 
        ret = LTTNG_OK;
 end:
+       free(filter_expression);
+       free(filter);
        return ret;
 }
 
@@ -238,7 +243,7 @@ int event_ust_enable_all_tracepoints(struct ltt_ust_session *usess,
 
                /* Create ust event */
                uevent = trace_ust_create_event(&events[i], filter_expression,
-                       filter, NULL);
+                               filter, NULL, false);
                if (uevent == NULL) {
                        ret = LTTNG_ERR_FATAL;
                        goto error_destroy;
@@ -285,7 +290,8 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess,
                struct ltt_ust_channel *uchan, struct lttng_event *event,
                char *filter_expression,
                struct lttng_filter_bytecode *filter,
-               struct lttng_event_exclusion *exclusion)
+               struct lttng_event_exclusion *exclusion,
+               bool internal_event)
 {
        int ret = LTTNG_OK, to_create = 0;
        struct ltt_ust_event *uevent;
@@ -300,7 +306,7 @@ int event_ust_enable_tracepoint(struct ltt_ust_session *usess,
                        event->loglevel, exclusion);
        if (uevent == NULL) {
                uevent = trace_ust_create_event(event, filter_expression,
-                       filter, exclusion);
+                               filter, exclusion, internal_event);
                /* We have passed ownership */
                filter_expression = NULL;
                filter = NULL;
@@ -503,7 +509,7 @@ error:
  */
 int event_agent_enable_all(struct ltt_ust_session *usess,
                struct agent *agt, struct lttng_event *event,
-               struct lttng_filter_bytecode *filter)
+               struct lttng_filter_bytecode *filter ,char *filter_expression)
 {
        int ret;
        struct agent_event *aevent;
@@ -514,7 +520,7 @@ int event_agent_enable_all(struct ltt_ust_session *usess,
        DBG("Event agent enabling ALL events for session %" PRIu64, usess->id);
 
        /* Enable event on agent application through TCP socket. */
-       ret = event_agent_enable(usess, agt, event, filter);
+       ret = event_agent_enable(usess, agt, event, filter, filter_expression);
        if (ret != LTTNG_OK) {
                goto error;
        }
@@ -540,7 +546,8 @@ error:
  */
 int event_agent_enable(struct ltt_ust_session *usess,
                struct agent *agt, struct lttng_event *event,
-               struct lttng_filter_bytecode *filter)
+               struct lttng_filter_bytecode *filter,
+               char *filter_expression)
 {
        int ret, created = 0;
        struct agent_event *aevent;
@@ -550,18 +557,19 @@ int event_agent_enable(struct ltt_ust_session *usess,
        assert(agt);
 
        DBG("Event agent enabling %s for session %" PRIu64 " with loglevel type %d "
-                       "and loglevel %d", event->name, usess->id, event->loglevel_type,
-                       event->loglevel);
+                       ", loglevel %d and filter \"%s\"", event->name,
+                       usess->id, event->loglevel_type, event->loglevel,
+                       filter_expression ? filter_expression : "NULL");
 
        aevent = agent_find_event(event->name, event->loglevel, agt);
        if (!aevent) {
-               aevent = agent_create_event(event->name, filter);
+               aevent = agent_create_event(event->name, event->loglevel,
+                               event->loglevel_type, filter,
+                               filter_expression);
                if (!aevent) {
                        ret = LTTNG_ERR_NOMEM;
                        goto error;
                }
-               aevent->loglevel = event->loglevel;
-               aevent->loglevel_type = event->loglevel_type;
                created = 1;
        }
 
@@ -614,7 +622,7 @@ const char *event_get_default_agent_ust_name(enum lttng_domain_type domain)
                }
                break;
        case LTTNG_DOMAIN_PYTHON:
-               default_event_name = DEFAULT_USER_PYTHON_EVENT_NAME;
+               default_event_name = DEFAULT_PYTHON_EVENT_NAME;
                break;
        default:
                assert(0);
This page took 0.02978 seconds and 4 git commands to generate.