Fix: event-notifier: not propagating error counter indexes
[deliverable/lttng-ust.git] / liblttng-ust / lttng-events.c
index 6a089122c8d1a2afee87f1a77e353aa4d7467736..c80ecbfdadc92a94be63e0c541d38e02d1a330e2 100644 (file)
@@ -34,9 +34,9 @@
 #include <time.h>
 #include <stdbool.h>
 #include <unistd.h>
+#include <dlfcn.h>
 #include <lttng/ust-endian.h>
 
-#include <urcu-bp.h>
 #include <urcu/arch.h>
 #include <urcu/compiler.h>
 #include <urcu/hlist.h>
@@ -143,11 +143,6 @@ int lttng_loglevel_match(int loglevel,
        }
 }
 
-void synchronize_trace(void)
-{
-       synchronize_rcu();
-}
-
 struct lttng_session *lttng_session_create(void)
 {
        struct lttng_session *session;
@@ -350,7 +345,7 @@ void lttng_session_destroy(struct lttng_session *session)
        cds_list_for_each_entry(event, &session->events_head, node) {
                _lttng_event_unregister(event);
        }
-       synchronize_trace();    /* Wait for in-flight events to complete */
+       lttng_ust_synchronize_trace();  /* Wait for in-flight events to complete */
        __tracepoint_probe_prune_release_queue();
        cds_list_for_each_entry_safe(event_enabler, event_tmpenabler,
                        &session->enablers_head, node)
@@ -383,7 +378,7 @@ void lttng_event_notifier_group_destroy(
                        &event_notifier_group->event_notifiers_head, node)
                _lttng_event_notifier_unregister(notifier);
 
-       synchronize_trace();
+       lttng_ust_synchronize_trace();
 
        cds_list_for_each_entry_safe(notifier_enabler, tmpnotifier_enabler,
                        &event_notifier_group->enablers_head, node)
@@ -841,7 +836,7 @@ socket_error:
 
 static
 int lttng_event_notifier_create(const struct lttng_event_desc *desc,
-               uint64_t token,
+               uint64_t token, uint64_t error_counter_index,
                struct lttng_event_notifier_group *event_notifier_group)
 {
        struct lttng_event_notifier *event_notifier;
@@ -864,6 +859,7 @@ int lttng_event_notifier_create(const struct lttng_event_desc *desc,
 
        event_notifier->group = event_notifier_group;
        event_notifier->user_token = token;
+       event_notifier->error_counter_index = error_counter_index;
 
        /* Event notifier will be enabled by enabler sync. */
        event_notifier->enabled = 0;
@@ -1218,7 +1214,7 @@ void lttng_probe_provider_unregister_events(
                _lttng_event_notifier_unregister);
 
        /* Wait for grace period. */
-       synchronize_trace();
+       lttng_ust_synchronize_trace();
        /* Prune the unregistration queue. */
        __tracepoint_probe_prune_release_queue();
 
@@ -1417,6 +1413,7 @@ struct lttng_event_notifier_enabler *lttng_event_notifier_enabler_create(
        CDS_INIT_LIST_HEAD(&event_notifier_enabler->base.excluder_head);
 
        event_notifier_enabler->user_token = event_notifier_param->event.token;
+       event_notifier_enabler->error_counter_index = event_notifier_param->error_counter_index;
        event_notifier_enabler->num_captures = 0;
 
        memcpy(&event_notifier_enabler->base.event_param.name,
@@ -1766,6 +1763,7 @@ void lttng_create_event_notifier_if_missing(
                         */
                        ret = lttng_event_notifier_create(desc,
                                event_notifier_enabler->user_token,
+                               event_notifier_enabler->error_counter_index,
                                event_notifier_group);
                        if (ret) {
                                DBG("Unable to create event_notifier %s, error %d\n",
This page took 0.026826 seconds and 5 git commands to generate.