lttng_ustconsumer_recv_metadata does not need all those locks
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 16 Jul 2013 01:17:06 +0000 (21:17 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 16 Jul 2013 18:33:33 +0000 (14:33 -0400)
Since lttng_ustconsumer_recv_metadata() does not push data into the
stream anymore, it only needs the metadata cache lock.

Reviewed-by: Julien Desfossez <julien.desfossez@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
src/common/consumer-timer.c
src/common/ust-consumer/ust-consumer.c

index a32dbf64d2d229e730f6e87a4add490c75567a39..a7f4536a25883cde8bec0aa8f4a3d9a13196e379 100644 (file)
@@ -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
index 986826fca267c455ba9825ea288edbff2e1ca8f4..21d7050b6761c1ebff8f0721f2e64379c68d06e5 100644 (file)
@@ -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");
This page took 0.027478 seconds and 4 git commands to generate.