X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Flive.c;h=d09c2f13ea39af1f0971dcf5aed37273c6503e55;hb=424150266e9afc978cca8d00f1d70c31f534e656;hp=ee3ecec65f9463b826c63732d6c53ac8dabd149a;hpb=52c81090c70c2f78e39374f8f004335b1112c189;p=lttng-tools.git diff --git a/src/bin/lttng-relayd/live.c b/src/bin/lttng-relayd/live.c index ee3ecec65..d09c2f13e 100644 --- a/src/bin/lttng-relayd/live.c +++ b/src/bin/lttng-relayd/live.c @@ -96,8 +96,6 @@ void cleanup(void) { DBG("Cleaning up"); - /* Close thread quit pipes */ - utils_close_pipe(live_thread_quit_pipe); free(live_uri); } @@ -139,21 +137,6 @@ void stop_threads(void) futex_nto1_wake(&viewer_cmd_queue.futex); } -/* - * Init thread quit pipe. - * - * Return -1 on error or 0 if all pipes are created. - */ -static -int init_thread_quit_pipe(void) -{ - int ret; - - ret = utils_create_pipe_cloexec(live_thread_quit_pipe); - - return ret; -} - /* * Create a poll set with O_CLOEXEC and add the thread quit pipe to the set. */ @@ -689,7 +672,7 @@ int viewer_attach_session(struct relay_command *cmd, } session = caa_container_of(node, struct relay_session, session_n); - if (cmd->session == session) { + if (cmd->session_id == session->id) { /* Same viewer already attached, just send the stream list. */ send_streams = 1; response.status = htobe32(VIEWER_ATTACH_OK); @@ -705,6 +688,7 @@ int viewer_attach_session(struct relay_command *cmd, session->viewer_attached++; send_streams = 1; response.status = htobe32(VIEWER_ATTACH_OK); + cmd->session_id = session->id; cmd->session = session; } @@ -1433,15 +1417,13 @@ void deferred_free_viewer_stream(struct rcu_head *head) } static -void viewer_del_streams(struct relay_session *session) +void viewer_del_streams(uint64_t session_id) { int ret; struct relay_viewer_stream *stream; struct lttng_ht_node_u64 *node; struct lttng_ht_iter iter; - assert(session); - rcu_read_lock(); cds_lfht_for_each_entry(viewer_streams_ht->ht, &iter.iter, node, node) { node = lttng_ht_iter_get_node_u64(&iter); @@ -1450,7 +1432,7 @@ void viewer_del_streams(struct relay_session *session) } stream = caa_container_of(node, struct relay_viewer_stream, stream_n); - if (stream->session_id != session->id) { + if (stream->session_id != session_id) { continue; } @@ -1494,9 +1476,7 @@ void del_connection(struct lttng_ht *relay_connections_ht, ret = lttng_ht_del(relay_connections_ht, iter); assert(!ret); - if (relay_connection->session) { - viewer_del_streams(relay_connection->session); - } + viewer_del_streams(relay_connection->session_id); call_rcu(&relay_connection->rcu_node, deferred_free_connection); } @@ -1722,7 +1702,7 @@ error: * main */ int live_start_threads(struct lttng_uri *uri, - struct relay_local_data *relay_ctx) + struct relay_local_data *relay_ctx, int quit_pipe[2]) { int ret = 0; void *status; @@ -1731,10 +1711,8 @@ int live_start_threads(struct lttng_uri *uri, assert(uri); live_uri = uri; - /* Create thread quit pipe */ - if ((ret = init_thread_quit_pipe()) < 0) { - goto error; - } + live_thread_quit_pipe[0] = quit_pipe[0]; + live_thread_quit_pipe[1] = quit_pipe[1]; /* Check if daemon is UID = 0 */ is_root = !getuid();