From: Mathieu Desnoyers Date: Fri, 1 Nov 2019 20:23:05 +0000 (-0400) Subject: Fix: sessiond: ust: deadlock with per-pid buffers X-Git-Tag: v2.12.0-rc1~253 X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=commitdiff_plain;h=a70ac2f49aa47a30abc2b50ec57b582eab4b1028;hp=a70ac2f49aa47a30abc2b50ec57b582eab4b1028 Fix: sessiond: ust: deadlock with per-pid buffers Do not hold the registry lock while communicating with the consumerd, because doing so causes inter-process deadlocks between consumerd and sessiond with the metadata request notification. The deadlock involves both sessiond and consumerd: * lttng-sessiond: thread 11 - thread_application_management close_metadata() pthread_mutex_lock(®istry->lock); consumer_close_metadata() pthread_mutex_lock(socket->lock); thread 15 - thread_consumer_management ust_consumer_metadata_request() pthread_mutex_lock(&ust_reg->lock); thread 8 - thread_manage_clients consumer_is_data_pending pthread_mutex_lock(socket->lock); consumer_socket_recv() * lttng-consumerd: thread 4 - consumer_timer_thread sample_channel_positions() pthread_mutex_lock(&stream->lock); thread 8 - consumer_thread_sessiond_poll consumer_data_pending pthread_mutex_lock(&consumer_data.lock); pthread_mutex_lock(&stream->lock); thread 7 - consumer_thread_data_poll lttng_consumer_read_subbuffer pthread_mutex_lock(&stream->chan->lock); pthread_mutex_lock(&stream->lock); do_sync_metadata pthread_mutex_lock(&metadata->lock); lttng_ustconsumer_sync_metadata pthread_mutex_unlock(&metadata_stream->lock); lttng_ustconsumer_request_metadata() pthread_mutex_lock(&ctx->metadata_socket_lock); lttcomm_recv_unix_sock() Signed-off-by: Mathieu Desnoyers Signed-off-by: Jérémie Galarneau ---