*/
#define _GNU_SOURCE
+#define _LGPL_SOURCE
#include <stdio.h>
#include <urcu/list.h>
#include <urcu/hlist.h>
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);
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);
_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);
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)
{
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;
}
lttng_filter_sync_state(runtime);
}
}
+ __tracepoint_probe_prune_release_queue();
}
/*