X-Git-Url: https://git.liburcu.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fsession.cpp;h=1846024fcc60670d505a740db81125c7ec1e0aec;hp=d8accb87de12d9cab9eba739f553b6104657d048;hb=e99e366487cb113a1041e4217ba181feb52d05c9;hpb=0a325f4dec3f6d553dad5d2c26ebfdc78201c363 diff --git a/src/bin/lttng-sessiond/session.cpp b/src/bin/lttng-sessiond/session.cpp index d8accb87d..1846024fc 100644 --- a/src/bin/lttng-sessiond/session.cpp +++ b/src/bin/lttng-sessiond/session.cpp @@ -6,30 +6,32 @@ */ #define _LGPL_SOURCE -#include +#include #include +#include +#include #include #include #include #include -#include -#include #include -#include +#include #include -#include -#include #include -#include +#include +#include +#include + #include "lttng-sessiond.hpp" -#include "kernel.hpp" +#include +#include "cmd.hpp" +#include "kernel.hpp" #include "session.hpp" -#include "utils.hpp" -#include "trace-ust.hpp" #include "timer.hpp" -#include "cmd.hpp" +#include "trace-ust.hpp" +#include "utils.hpp" namespace { struct ltt_session_destroy_notifier_element { @@ -42,6 +44,8 @@ struct ltt_session_clear_notifier_element { void *user_data; }; +namespace ls = lttng::sessiond; + /* * NOTES: * @@ -1461,3 +1465,38 @@ end: rcu_read_unlock(); return found; } + +void ls::details::locked_session_release(ltt_session *session) +{ + session_unlock(session); + session_put(session); +} + +ltt_session::locked_ptr ls::find_locked_session_by_id(ltt_session::id_t id) +{ + lttng::urcu::read_lock_guard rcu_lock; + auto session = session_find_by_id(id); + + if (!session) { + return nullptr; + } + + /* + * The pointer falling out of scope will unlock and release the reference to the + * session. + */ + session_lock(session); + return ltt_session::locked_ptr(session); +} + +ltt_session::sptr ls::find_session_by_id(ltt_session::id_t id) +{ + lttng::urcu::read_lock_guard rcu_lock; + auto session = session_find_by_id(id); + + if (!session) { + return nullptr; + } + + return {session, session_put}; +}