From bb586a6e7c1337041aab59ec04824ce9bf002d8c Mon Sep 17 00:00:00 2001 From: Jonathan Rajotte Date: Mon, 10 Sep 2018 20:09:14 -0400 Subject: [PATCH] Fix: holding the stream lock does not equate to having data pending MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/common/consumer/consumer.c | 34 +--------------------------------- 1 file changed, 1 insertion(+), 33 deletions(-) diff --git a/src/common/consumer/consumer.c b/src/common/consumer/consumer.c index 2c8283655..1d6f8b4cc 100644 --- a/src/common/consumer/consumer.c +++ b/src/common/consumer/consumer.c @@ -3673,34 +3673,6 @@ error_nosignal: } } -/* - * 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. * @@ -3786,11 +3758,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 -- 2.34.1