From: Jonathan Rajotte Date: Tue, 11 Sep 2018 00:09:14 +0000 (-0400) Subject: Fix: holding the stream lock does not equate to having data pending X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=commitdiff_plain;h=097da1af8827ae4c038e0ede0f4efbe339e9b9fd Fix: holding the stream lock does not equate to having data pending The live timer can hold the stream lock while sending empty beacon. An empty beacon does not mean that data is still pending for the stream. Signed-off-by: Jonathan Rajotte Signed-off-by: Jérémie Galarneau --- diff --git a/src/common/consumer/consumer.c b/src/common/consumer/consumer.c index 3556b7897..7b87a85fe 100644 --- a/src/common/consumer/consumer.c +++ b/src/common/consumer/consumer.c @@ -3538,34 +3538,6 @@ error_nosignal: return ret; } -/* - * Try to lock the stream mutex. - * - * On success, 1 is returned else 0 indicating that the mutex is NOT lock. - */ -static int stream_try_lock(struct lttng_consumer_stream *stream) -{ - int ret; - - assert(stream); - - /* - * Try to lock the stream mutex. On failure, we know that the stream is - * being used else where hence there is data still being extracted. - */ - ret = pthread_mutex_trylock(&stream->lock); - if (ret) { - /* For both EBUSY and EINVAL error, the mutex is NOT locked. */ - ret = 0; - goto end; - } - - ret = 1; - -end: - return ret; -} - /* * Search for a relayd associated to the session id and return the reference. * @@ -3651,11 +3623,7 @@ int consumer_data_pending(uint64_t id) ht->hash_fct(&id, lttng_ht_seed), ht->match_fct, &id, &iter.iter, stream, node_session_id.node) { - /* If this call fails, the stream is being used hence data pending. */ - ret = stream_try_lock(stream); - if (!ret) { - goto data_pending; - } + pthread_mutex_lock(&stream->lock); /* * A removed node from the hash table indicates that the stream has