Change the metadata hash table node
authorDavid Goulet <dgoulet@efficios.com>
Thu, 11 Oct 2012 21:05:42 +0000 (17:05 -0400)
committerDavid Goulet <dgoulet@efficios.com>
Fri, 19 Oct 2012 16:49:01 +0000 (12:49 -0400)
Remove the use of the "waitfd_node" for metadata and index the "node" by
wait fd during stream allocation only for metadata stream.

This is done so the waitfd node could be used later on for the hash
table indexing stream by session id for the traced data check command
(soon to be implemented).

Signed-off-by: David Goulet <dgoulet@efficios.com>
src/common/consumer.c

index 0b2f07391009f4a317b8f7c876443addad39d660..35df86dd81c922217a6dbf628af93fd79d5b3432 100644 (file)
@@ -172,17 +172,6 @@ void consumer_free_stream(struct rcu_head *head)
        free(stream);
 }
 
-static
-void consumer_free_metadata_stream(struct rcu_head *head)
-{
-       struct lttng_ht_node_ulong *node =
-               caa_container_of(head, struct lttng_ht_node_ulong, head);
-       struct lttng_consumer_stream *stream =
-               caa_container_of(node, struct lttng_consumer_stream, waitfd_node);
-
-       free(stream);
-}
-
 /*
  * RCU protected relayd socket pair free.
  */
@@ -417,8 +406,17 @@ struct lttng_consumer_stream *consumer_allocate_stream(
        stream->metadata_flag = metadata_flag;
        strncpy(stream->path_name, path_name, sizeof(stream->path_name));
        stream->path_name[sizeof(stream->path_name) - 1] = '\0';
-       lttng_ht_node_init_ulong(&stream->waitfd_node, stream->wait_fd);
-       lttng_ht_node_init_ulong(&stream->node, stream->key);
+
+       /*
+        * Index differently the metadata node because the thread is using an
+        * internal hash table to match streams in the metadata_ht to the epoll set
+        * file descriptor.
+        */
+       if (metadata_flag) {
+               lttng_ht_node_init_ulong(&stream->node, stream->wait_fd);
+       } else {
+               lttng_ht_node_init_ulong(&stream->node, stream->key);
+       }
 
        /*
         * The cpu number is needed before using any ustctl_* actions. Ignored for
@@ -1576,11 +1574,11 @@ static void destroy_stream_ht(struct lttng_ht *ht)
        }
 
        rcu_read_lock();
-       cds_lfht_for_each_entry(ht->ht, &iter.iter, stream, waitfd_node.node) {
+       cds_lfht_for_each_entry(ht->ht, &iter.iter, stream, node.node) {
                ret = lttng_ht_del(ht, &iter);
                assert(!ret);
 
-               call_rcu(&stream->waitfd_node.head, consumer_free_metadata_stream);
+               call_rcu(&stream->node.head, consumer_free_stream);
        }
        rcu_read_unlock();
 
@@ -1633,7 +1631,7 @@ void consumer_del_metadata_stream(struct lttng_consumer_stream *stream,
        }
 
        rcu_read_lock();
-       iter.iter.node = &stream->waitfd_node.node;
+       iter.iter.node = &stream->node.node;
        ret = lttng_ht_del(ht, &iter);
        assert(!ret);
        rcu_read_unlock();
@@ -1704,7 +1702,7 @@ end:
        }
 
 free_stream:
-       call_rcu(&stream->waitfd_node.head, consumer_free_metadata_stream);
+       call_rcu(&stream->node.head, consumer_free_stream);
 }
 
 /*
@@ -1753,7 +1751,7 @@ static int consumer_add_metadata_stream(struct lttng_consumer_stream *stream,
        /* Steal stream identifier to avoid having streams with the same key */
        consumer_steal_stream_key(stream->key, ht);
 
-       lttng_ht_add_unique_ulong(ht, &stream->waitfd_node);
+       lttng_ht_add_unique_ulong(ht, &stream->node);
        rcu_read_unlock();
 
        pthread_mutex_unlock(&consumer_data.lock);
@@ -1878,7 +1876,7 @@ restart:
                        assert(node);
 
                        stream = caa_container_of(node, struct lttng_consumer_stream,
-                                       waitfd_node);
+                                       node);
 
                        /* Check for error event */
                        if (revents & (LPOLLERR | LPOLLHUP)) {
This page took 0.036099 seconds and 4 git commands to generate.