[lttng-dev] [PATCH lttng-tools] Fix: Holding the stream lock does not equate to having data pending

Jérémie Galarneau jeremie.galarneau at efficios.com
Wed Sep 19 11:53:04 EDT 2018


Merged in master, stable-2.11, stable-2.10, and stable-2.9.

Thanks,
Jérémie

On Mon, Sep 10, 2018 at 08:09:14PM -0400, Jonathan Rajotte wrote:
> 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 <jonathan.rajotte-julien at efficios.com>
> ---
>  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 0cfbf5c7c..66f10c780 100644
> --- a/src/common/consumer/consumer.c
> +++ b/src/common/consumer/consumer.c
> @@ -3668,34 +3668,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.
>   *
> @@ -3779,11 +3751,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.17.1
> 


More information about the lttng-dev mailing list