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-Tag: v2.12.0-rc1~796 X-Git-Url: https://git.lttng.org/?a=commitdiff_plain;ds=sidebyside;h=bb586a6e7c1337041aab59ec04824ce9bf002d8c;p=lttng-tools.git 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 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