X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Fviewer-session.cpp;h=45fa2dcacafff947a43de2945c948bf994694cd1;hb=0729ea5558053d5a1a0d7aea51febf63ee1f3b3f;hp=9d067577a04caedcaf6a90af8825365ec1bd9dc3;hpb=28ab034a2c3582d07d3423d2d746731f87d3969f;p=lttng-tools.git diff --git a/src/bin/lttng-relayd/viewer-session.cpp b/src/bin/lttng-relayd/viewer-session.cpp index 9d067577a..45fa2dcac 100644 --- a/src/bin/lttng-relayd/viewer-session.cpp +++ b/src/bin/lttng-relayd/viewer-session.cpp @@ -16,10 +16,11 @@ #include "viewer-stream.hpp" #include +#include #include -struct relay_viewer_session *viewer_session_create(void) +struct relay_viewer_session *viewer_session_create() { struct relay_viewer_session *vsession; @@ -39,7 +40,7 @@ int viewer_session_set_trace_chunk_copy(struct relay_viewer_session *vsession, struct lttng_trace_chunk *viewer_chunk; lttng_trace_chunk_put(vsession->current_trace_chunk); - vsession->current_trace_chunk = NULL; + vsession->current_trace_chunk = nullptr; DBG("Copying relay session's current trace chunk to the viewer session"); if (!relay_session_trace_chunk) { @@ -149,25 +150,31 @@ void viewer_session_close_one_session(struct relay_viewer_session *vsession, * TODO: improvement: create more efficient list of * vstream per session. */ - cds_lfht_for_each_entry (viewer_streams_ht->ht, &iter.iter, vstream, stream_n.node) { - if (!viewer_stream_get(vstream)) { - continue; - } - if (vstream->stream->trace->session != session) { + { + lttng::urcu::read_lock_guard read_guard; + + cds_lfht_for_each_entry ( + viewer_streams_ht->ht, &iter.iter, vstream, stream_n.node) { + if (!viewer_stream_get(vstream)) { + continue; + } + if (vstream->stream->trace->session != session) { + viewer_stream_put(vstream); + continue; + } + /* Put local reference. */ + viewer_stream_put(vstream); + /* + * We have reached one of the viewer stream's lifetime + * end condition. This "put" will cause the proper + * teardown of the viewer stream. + */ viewer_stream_put(vstream); - continue; } - /* Put local reference. */ - viewer_stream_put(vstream); - /* - * We have reached one of the viewer stream's lifetime - * end condition. This "put" will cause the proper - * teardown of the viewer stream. - */ - viewer_stream_put(vstream); } + lttng_trace_chunk_put(vsession->current_trace_chunk); - vsession->current_trace_chunk = NULL; + vsession->current_trace_chunk = nullptr; viewer_session_detach(vsession, session); } @@ -175,12 +182,14 @@ void viewer_session_close(struct relay_viewer_session *vsession) { struct relay_session *session; - rcu_read_lock(); - cds_list_for_each_entry_rcu(session, &vsession->session_list, viewer_session_node) { - viewer_session_close_one_session(vsession, session); + lttng::urcu::read_lock_guard read_lock; + + cds_list_for_each_entry_rcu(session, &vsession->session_list, viewer_session_node) + { + viewer_session_close_one_session(vsession, session); + } } - rcu_read_unlock(); } /* @@ -199,16 +208,18 @@ int viewer_session_is_attached(struct relay_viewer_session *vsession, struct rel if (!session->viewer_attached) { goto end; } - rcu_read_lock(); - cds_list_for_each_entry_rcu(iter, &vsession->session_list, viewer_session_node) + { - if (session == iter) { - found = 1; - goto end_rcu_unlock; + lttng::urcu::read_lock_guard read_lock; + cds_list_for_each_entry_rcu(iter, &vsession->session_list, viewer_session_node) + { + if (session == iter) { + found = 1; + break; + } } } -end_rcu_unlock: - rcu_read_unlock(); + end: pthread_mutex_unlock(&session->lock); return found;