Version 2.9.7
[lttng-ust.git] / liblttng-ust / lttng-events.c
index f6db6e8a351d495e3e9cd2626e14fece8c21af49..4c0e10910b29f40232b55b446626ef82c31c2bdd 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 #define _GNU_SOURCE
+#define _LGPL_SOURCE
 #include <stdio.h>
 #include <urcu/list.h>
 #include <urcu/hlist.h>
@@ -184,7 +185,7 @@ void register_event(struct lttng_event *event)
 
        assert(event->registered == 0);
        desc = event->desc;
-       ret = __tracepoint_probe_register(desc->name,
+       ret = __tracepoint_probe_register_queue_release(desc->name,
                        desc->probe_callback,
                        event, desc->signature);
        WARN_ON_ONCE(ret);
@@ -200,7 +201,7 @@ void unregister_event(struct lttng_event *event)
 
        assert(event->registered == 1);
        desc = event->desc;
-       ret = __tracepoint_probe_unregister(desc->name,
+       ret = __tracepoint_probe_unregister_queue_release(desc->name,
                        desc->probe_callback,
                        event);
        WARN_ON_ONCE(ret);
@@ -230,6 +231,7 @@ void lttng_session_destroy(struct lttng_session *session)
                _lttng_event_unregister(event);
        }
        synchronize_trace();    /* Wait for in-flight events to complete */
+       __tracepoint_probe_prune_release_queue();
        cds_list_for_each_entry_safe(enabler, tmpenabler,
                        &session->enablers_head, node)
                lttng_enabler_destroy(enabler);
@@ -384,6 +386,16 @@ int lttng_create_all_ctx_enums(size_t nr_fields,
        return 0;
 }
 
+/*
+ * Ensure that a state-dump will be performed for this session at the end
+ * of the current handle_message().
+ */
+int lttng_session_statedump(struct lttng_session *session)
+{
+       session->statedump_pending = 1;
+       lttng_ust_sockinfo_session_enabled(session->owner);
+       return 0;
+}
 
 int lttng_session_enable(struct lttng_session *session)
 {
@@ -453,8 +465,9 @@ int lttng_session_enable(struct lttng_session *session)
        CMM_ACCESS_ONCE(session->active) = 1;
        CMM_ACCESS_ONCE(session->been_active) = 1;
 
-       session->statedump_pending = 1;
-       lttng_ust_sockinfo_session_enabled(session->owner);
+       ret = lttng_session_statedump(session);
+       if (ret)
+               return ret;
 end:
        return ret;
 }
@@ -962,6 +975,7 @@ int lttng_enabler_attach_exclusion(struct lttng_enabler *enabler,
 }
 
 int lttng_attach_context(struct lttng_ust_context *context_param,
+               union ust_args *uargs,
                struct lttng_ctx **ctx, struct lttng_session *session)
 {
        /*
@@ -996,6 +1010,9 @@ int lttng_attach_context(struct lttng_ust_context *context_param,
                return lttng_add_ip_to_ctx(ctx);
        case LTTNG_UST_CONTEXT_CPU_ID:
                return lttng_add_cpu_id_to_ctx(ctx);
+       case LTTNG_UST_CONTEXT_APP_CONTEXT:
+               return lttng_ust_add_app_context_to_ctx_rcu(uargs->app_context.ctxname,
+                       ctx);
        default:
                return -EINVAL;
        }
@@ -1110,6 +1127,7 @@ void lttng_session_sync_enablers(struct lttng_session *session)
                        lttng_filter_sync_state(runtime);
                }
        }
+       __tracepoint_probe_prune_release_queue();
 }
 
 /*
This page took 0.02609 seconds and 4 git commands to generate.