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 <jeremie.galarneau@efficios.com>
DBG3("Consumer delete metadata stream %d", stream->wait_fd);
pthread_mutex_lock(&consumer_data.lock);
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->metadata_cache->lock);
+ pthread_mutex_lock(&stream->chan->lock);
pthread_mutex_lock(&stream->lock);
/* Remove any reference to that stream. */
pthread_mutex_lock(&stream->lock);
/* Remove any reference to that stream. */
stream->chan->metadata_stream = NULL;
pthread_mutex_unlock(&stream->lock);
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->lock);
+ pthread_mutex_unlock(&stream->chan->metadata_cache->lock);
pthread_mutex_unlock(&consumer_data.lock);
if (free_chan) {
pthread_mutex_unlock(&consumer_data.lock);
if (free_chan) {