From 1ea6cc572bffbebf2ef9cbdd1098a35c5d0411aa Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Sat, 7 Jan 2017 12:32:13 -0500 Subject: [PATCH] Fix: lock nesting order reversed MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The lttng_consumer_stream lock must nest INSIDE the metadata cache lock, as indicated in the structure's comments (see consumer.h:340). CID 1368314 (#1 of 1): Thread deadlock (ORDER_REVERSAL) Reported-by: Coverity Scan Signed-off-by: Jérémie Galarneau --- src/common/consumer/consumer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/consumer/consumer.c b/src/common/consumer/consumer.c index 54a0531d5..234944dad 100644 --- a/src/common/consumer/consumer.c +++ b/src/common/consumer/consumer.c @@ -2051,8 +2051,8 @@ void consumer_del_metadata_stream(struct lttng_consumer_stream *stream, DBG3("Consumer delete metadata stream %d", stream->wait_fd); pthread_mutex_lock(&consumer_data.lock); - pthread_mutex_lock(&stream->chan->lock); pthread_mutex_lock(&stream->chan->metadata_cache->lock); + pthread_mutex_lock(&stream->chan->lock); pthread_mutex_lock(&stream->lock); /* Remove any reference to that stream. */ @@ -2078,8 +2078,8 @@ void consumer_del_metadata_stream(struct lttng_consumer_stream *stream, stream->chan->metadata_stream = NULL; pthread_mutex_unlock(&stream->lock); - pthread_mutex_unlock(&stream->chan->metadata_cache->lock); pthread_mutex_unlock(&stream->chan->lock); + pthread_mutex_unlock(&stream->chan->metadata_cache->lock); pthread_mutex_unlock(&consumer_data.lock); if (free_chan) { -- 2.34.1