From: Mathieu Desnoyers Date: Tue, 16 Jul 2013 01:17:06 +0000 (-0400) Subject: lttng_ustconsumer_recv_metadata does not need all those locks X-Git-Tag: v2.3.0-rc1~16 X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=commitdiff_plain;h=f82d9449a304561c5914b2c5f9471a640ca99248 lttng_ustconsumer_recv_metadata does not need all those locks Since lttng_ustconsumer_recv_metadata() does not push data into the stream anymore, it only needs the metadata cache lock. Reviewed-by: Julien Desfossez Signed-off-by: Mathieu Desnoyers --- diff --git a/src/common/consumer-timer.c b/src/common/consumer-timer.c index a32dbf64d..a7f4536a2 100644 --- a/src/common/consumer-timer.c +++ b/src/common/consumer-timer.c @@ -82,9 +82,7 @@ static void metadata_switch_timer(struct lttng_consumer_local_data *ctx, * Locks taken by lttng_ustconsumer_request_metadata(): * - metadata_socket_lock * - Calling lttng_ustconsumer_recv_metadata(): - * - consumer_data.lock - * - channel->lock - * - channel->metadata_cache->lock + * - channel->metadata_cache->lock * - Calling consumer_metadata_cache_flushed(): * - consumer_data.lock * - channel->lock diff --git a/src/common/ust-consumer/ust-consumer.c b/src/common/ust-consumer/ust-consumer.c index 986826fca..21d7050b6 100644 --- a/src/common/ust-consumer/ust-consumer.c +++ b/src/common/ust-consumer/ust-consumer.c @@ -1039,17 +1039,6 @@ int lttng_ustconsumer_recv_metadata(int sock, uint64_t key, uint64_t offset, goto end_free; } - /* - * XXX: The consumer data lock is acquired before calling metadata cache - * write which calls push metadata that MUST be protected by the consumer - * lock in order to be able to check the validity of the metadata stream of - * the channel. - * - * Note that this will be subject to change to better fine grained locking - * and ultimately try to get rid of this global consumer data lock. - */ - pthread_mutex_lock(&consumer_data.lock); - pthread_mutex_lock(&channel->lock); pthread_mutex_lock(&channel->metadata_cache->lock); ret = consumer_metadata_cache_write(channel, offset, len, metadata_str); if (ret < 0) { @@ -1061,13 +1050,9 @@ int lttng_ustconsumer_recv_metadata(int sock, uint64_t key, uint64_t offset, * waiting for the metadata cache to be flushed. */ pthread_mutex_unlock(&channel->metadata_cache->lock); - pthread_mutex_unlock(&channel->lock); - pthread_mutex_unlock(&consumer_data.lock); goto end_free; } pthread_mutex_unlock(&channel->metadata_cache->lock); - pthread_mutex_unlock(&channel->lock); - pthread_mutex_unlock(&consumer_data.lock); while (consumer_metadata_cache_flushed(channel, offset + len)) { DBG("Waiting for metadata to be flushed");