X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Fsession.c;h=3ea8e50d6f9aaf60d64789069636c9ea13736e50;hp=9702bd220b0d134bc4502ecd6e4435e682e22ba1;hb=ce4d40839ac3beef1a58730d3636a522497bc60f;hpb=bb5d54e7416f8af61ac931c3b50b4df576e76731 diff --git a/src/bin/lttng-relayd/session.c b/src/bin/lttng-relayd/session.c index 9702bd220..3ea8e50d6 100644 --- a/src/bin/lttng-relayd/session.c +++ b/src/bin/lttng-relayd/session.c @@ -69,7 +69,6 @@ struct relay_session *session_create(const char *session_name, urcu_ref_init(&session->ref); CDS_INIT_LIST_HEAD(&session->recv_list); pthread_mutex_init(&session->lock, NULL); - pthread_mutex_init(&session->reflock, NULL); pthread_mutex_init(&session->recv_list_lock, NULL); session->live_timer = live_timer; @@ -86,16 +85,7 @@ error: /* Should be called with RCU read-side lock held. */ bool session_get(struct relay_session *session) { - bool has_ref = false; - - pthread_mutex_lock(&session->reflock); - if (session->ref.refcount != 0) { - has_ref = true; - urcu_ref_get(&session->ref); - } - pthread_mutex_unlock(&session->reflock); - - return has_ref; + return urcu_ref_get_unless_zero(&session->ref); } /* @@ -178,9 +168,7 @@ void session_release(struct urcu_ref *ref) void session_put(struct relay_session *session) { rcu_read_lock(); - pthread_mutex_lock(&session->reflock); urcu_ref_put(&session->ref, session_release); - pthread_mutex_unlock(&session->reflock); rcu_read_unlock(); } @@ -228,6 +216,27 @@ rcu_unlock: return ret; } +int session_abort(struct relay_session *session) +{ + int ret = 0; + + if (!session) { + return 0; + } + + pthread_mutex_lock(&session->lock); + DBG("aborting session %" PRIu64, session->id); + if (session->aborted) { + ERR("session %" PRIu64 " is already aborted", session->id); + ret = -1; + goto unlock; + } + session->aborted = true; +unlock: + pthread_mutex_unlock(&session->lock); + return ret; +} + void print_sessions(void) { struct lttng_ht_iter iter;