Clean-up: modernize pretty_xml.cpp
[lttng-tools.git] / src / common / hashtable / hashtable.cpp
index 7112debf28eae58a63bc6bb7d367ffac81f6a6c1..29d3ac499715f1e9da4e8eb8d7b4c79b2c786157 100644 (file)
@@ -1,25 +1,25 @@
 /*
- * Copyright (C) 2011 David Goulet <david.goulet@polymtl.ca>
+ * Copyright (C) 2011 EfficiOS Inc.
  *
  * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
 #define _LGPL_SOURCE
+#include "hashtable.hpp"
+#include "utils.hpp"
+
+#include <common/common.hpp>
+#include <common/defaults.hpp>
+#include <common/urcu.hpp>
+
 #include <string.h>
 #include <urcu.h>
 #include <urcu/compiler.h>
 
-#include <common/common.h>
-#include <common/defaults.h>
-
-#include "hashtable.h"
-#include "utils.h"
-
 /* seed_lock protects both seed_init and lttng_ht_seed. */
 static pthread_mutex_t seed_lock = PTHREAD_MUTEX_INITIALIZER;
 static bool seed_init;
-unsigned long lttng_ht_seed;
 
 static unsigned long min_hash_alloc_size = 1;
 static unsigned long max_hash_buckets_size = 0;
@@ -37,7 +37,7 @@ static unsigned long max_hash_buckets_size = 0;
 static int match_str(struct cds_lfht_node *node, const void *key)
 {
        struct lttng_ht_node_str *match_node =
-               caa_container_of(node, struct lttng_ht_node_str, node);
+               lttng::utils::container_of(node, &lttng_ht_node_str::node);
 
        return hash_match_key_str(match_node->key, (void *) key);
 }
@@ -48,7 +48,7 @@ static int match_str(struct cds_lfht_node *node, const void *key)
 static int match_ulong(struct cds_lfht_node *node, const void *key)
 {
        struct lttng_ht_node_ulong *match_node =
-               caa_container_of(node, struct lttng_ht_node_ulong, node);
+               lttng::utils::container_of(node, &lttng_ht_node_ulong::node);
 
        return hash_match_key_ulong((void *) match_node->key, (void *) key);
 }
@@ -59,7 +59,7 @@ static int match_ulong(struct cds_lfht_node *node, const void *key)
 static int match_u64(struct cds_lfht_node *node, const void *key)
 {
        struct lttng_ht_node_u64 *match_node =
-               caa_container_of(node, struct lttng_ht_node_u64, node);
+               lttng::utils::container_of(node, &lttng_ht_node_u64::node);
 
        return hash_match_key_u64(&match_node->key, (void *) key);
 }
@@ -70,13 +70,12 @@ static int match_u64(struct cds_lfht_node *node, const void *key)
 static int match_two_u64(struct cds_lfht_node *node, const void *key)
 {
        struct lttng_ht_node_two_u64 *match_node =
-               caa_container_of(node, struct lttng_ht_node_two_u64, node);
+               lttng::utils::container_of(node, &lttng_ht_node_two_u64::node);
 
        return hash_match_key_two_u64((void *) &match_node->key, (void *) key);
 }
 
-static inline
-const char *lttng_ht_type_str(enum lttng_ht_type type)
+static inline const char *lttng_ht_type_str(enum lttng_ht_type type)
 {
        switch (type) {
        case LTTNG_HT_TYPE_STRING:
@@ -106,19 +105,22 @@ struct lttng_ht *lttng_ht_new(unsigned long size, lttng_ht_type type)
 
        pthread_mutex_lock(&seed_lock);
        if (!seed_init) {
-               lttng_ht_seed = (unsigned long) time(NULL);
+               lttng_ht_seed = (unsigned long) time(nullptr);
                seed_init = true;
        }
        pthread_mutex_unlock(&seed_lock);
 
-       ht = (lttng_ht *) zmalloc(sizeof(*ht));
-       if (ht == NULL) {
+       ht = zmalloc<lttng_ht>();
+       if (ht == nullptr) {
                PERROR("zmalloc lttng_ht");
                goto error;
        }
 
-       ht->ht = cds_lfht_new(size, min_hash_alloc_size, max_hash_buckets_size,
-                       CDS_LFHT_AUTO_RESIZE | CDS_LFHT_ACCOUNTING, NULL);
+       ht->ht = cds_lfht_new(size,
+                             min_hash_alloc_size,
+                             max_hash_buckets_size,
+                             CDS_LFHT_AUTO_RESIZE | CDS_LFHT_ACCOUNTING,
+                             nullptr);
        /*
         * There is already an assert in the RCU hashtable code so if the ht is
         * NULL here there is a *huge* problem.
@@ -148,13 +150,12 @@ struct lttng_ht *lttng_ht_new(unsigned long size, lttng_ht_type type)
                goto error;
        }
 
-       DBG3("Created hashtable size %lu at %p of type %s", size, ht->ht,
-                       lttng_ht_type_str(type));
+       DBG3("Created hashtable size %lu at %p of type %s", size, ht->ht, lttng_ht_type_str(type));
 
        return ht;
 
 error:
-       return NULL;
+       return nullptr;
 }
 
 /*
@@ -164,7 +165,7 @@ void lttng_ht_destroy(struct lttng_ht *ht)
 {
        int ret;
 
-       ret = cds_lfht_destroy(ht->ht, NULL);
+       ret = cds_lfht_destroy(ht->ht, nullptr);
        LTTNG_ASSERT(!ret);
        free(ht);
 }
@@ -183,8 +184,7 @@ void lttng_ht_node_init_str(struct lttng_ht_node_str *node, char *key)
 /*
  * Init lttng ht node unsigned long.
  */
-void lttng_ht_node_init_ulong(struct lttng_ht_node_ulong *node,
-               unsigned long key)
+void lttng_ht_node_init_ulong(struct lttng_ht_node_ulong *node, unsigned long key)
 {
        LTTNG_ASSERT(node);
 
@@ -195,8 +195,7 @@ void lttng_ht_node_init_ulong(struct lttng_ht_node_ulong *node,
 /*
  * Init lttng ht node uint64_t.
  */
-void lttng_ht_node_init_u64(struct lttng_ht_node_u64 *node,
-               uint64_t key)
+void lttng_ht_node_init_u64(struct lttng_ht_node_u64 *node, uint64_t key)
 {
        LTTNG_ASSERT(node);
 
@@ -207,8 +206,7 @@ void lttng_ht_node_init_u64(struct lttng_ht_node_u64 *node,
 /*
  * Init lttng ht node with two uint64_t.
  */
-void lttng_ht_node_init_two_u64(struct lttng_ht_node_two_u64 *node,
-               uint64_t key1, uint64_t key2)
+void lttng_ht_node_init_two_u64(struct lttng_ht_node_two_u64 *node, uint64_t key1, uint64_t key2)
 {
        LTTNG_ASSERT(node);
 
@@ -256,21 +254,18 @@ void lttng_ht_node_free_two_u64(struct lttng_ht_node_two_u64 *node)
 /*
  * Lookup function in hashtable.
  */
-void lttng_ht_lookup(struct lttng_ht *ht, const void *key,
-               struct lttng_ht_iter *iter)
+void lttng_ht_lookup(struct lttng_ht *ht, const void *key, struct lttng_ht_iter *iter)
 {
        LTTNG_ASSERT(ht);
        LTTNG_ASSERT(ht->ht);
 
-       cds_lfht_lookup(ht->ht, ht->hash_fct(key, lttng_ht_seed),
-                       ht->match_fct, key, &iter->iter);
+       cds_lfht_lookup(ht->ht, ht->hash_fct(key, lttng_ht_seed), ht->match_fct, key, &iter->iter);
 }
 
 /*
  * Add unique string node to hashtable.
  */
-void lttng_ht_add_unique_str(struct lttng_ht *ht,
-               struct lttng_ht_node_str *node)
+void lttng_ht_add_unique_str(struct lttng_ht *ht, struct lttng_ht_node_str *node)
 {
        struct cds_lfht_node *node_ptr;
        LTTNG_ASSERT(ht);
@@ -278,28 +273,27 @@ void lttng_ht_add_unique_str(struct lttng_ht *ht,
        LTTNG_ASSERT(node);
 
        /* RCU read lock protects from ABA. */
-       rcu_read_lock();
-       node_ptr = cds_lfht_add_unique(ht->ht, ht->hash_fct(node->key, lttng_ht_seed),
-                       ht->match_fct, node->key, &node->node);
-       rcu_read_unlock();
+       lttng::urcu::read_lock_guard read_lock;
+       node_ptr = cds_lfht_add_unique(ht->ht,
+                                      ht->hash_fct(node->key, lttng_ht_seed),
+                                      ht->match_fct,
+                                      node->key,
+                                      &node->node);
        LTTNG_ASSERT(node_ptr == &node->node);
 }
 
 /*
  * Add string node to hashtable.
  */
-void lttng_ht_add_str(struct lttng_ht *ht,
-               struct lttng_ht_node_str *node)
+void lttng_ht_add_str(struct lttng_ht *ht, struct lttng_ht_node_str *node)
 {
        LTTNG_ASSERT(ht);
        LTTNG_ASSERT(ht->ht);
        LTTNG_ASSERT(node);
 
        /* RCU read lock protects from ABA. */
-       rcu_read_lock();
-       cds_lfht_add(ht->ht, ht->hash_fct(node->key, lttng_ht_seed),
-                       &node->node);
-       rcu_read_unlock();
+       lttng::urcu::read_lock_guard read_lock;
+       cds_lfht_add(ht->ht, ht->hash_fct(node->key, lttng_ht_seed), &node->node);
 }
 
 /*
@@ -312,10 +306,8 @@ void lttng_ht_add_ulong(struct lttng_ht *ht, struct lttng_ht_node_ulong *node)
        LTTNG_ASSERT(node);
 
        /* RCU read lock protects from ABA. */
-       rcu_read_lock();
-       cds_lfht_add(ht->ht, ht->hash_fct((void *) node->key, lttng_ht_seed),
-                       &node->node);
-       rcu_read_unlock();
+       lttng::urcu::read_lock_guard read_lock;
+       cds_lfht_add(ht->ht, ht->hash_fct((void *) node->key, lttng_ht_seed), &node->node);
 }
 
 /*
@@ -328,17 +320,14 @@ void lttng_ht_add_u64(struct lttng_ht *ht, struct lttng_ht_node_u64 *node)
        LTTNG_ASSERT(node);
 
        /* RCU read lock protects from ABA. */
-       rcu_read_lock();
-       cds_lfht_add(ht->ht, ht->hash_fct(&node->key, lttng_ht_seed),
-                       &node->node);
-       rcu_read_unlock();
+       lttng::urcu::read_lock_guard read_lock;
+       cds_lfht_add(ht->ht, ht->hash_fct(&node->key, lttng_ht_seed), &node->node);
 }
 
 /*
  * Add unique unsigned long node to hashtable.
  */
-void lttng_ht_add_unique_ulong(struct lttng_ht *ht,
-               struct lttng_ht_node_ulong *node)
+void lttng_ht_add_unique_ulong(struct lttng_ht *ht, struct lttng_ht_node_ulong *node)
 {
        struct cds_lfht_node *node_ptr;
        LTTNG_ASSERT(ht);
@@ -346,19 +335,19 @@ void lttng_ht_add_unique_ulong(struct lttng_ht *ht,
        LTTNG_ASSERT(node);
 
        /* RCU read lock protects from ABA. */
-       rcu_read_lock();
+       lttng::urcu::read_lock_guard read_lock;
        node_ptr = cds_lfht_add_unique(ht->ht,
-                       ht->hash_fct((void *) node->key, lttng_ht_seed), ht->match_fct,
-                       (void *) node->key, &node->node);
-       rcu_read_unlock();
+                                      ht->hash_fct((void *) node->key, lttng_ht_seed),
+                                      ht->match_fct,
+                                      (void *) node->key,
+                                      &node->node);
        LTTNG_ASSERT(node_ptr == &node->node);
 }
 
 /*
  * Add unique uint64_t node to hashtable.
  */
-void lttng_ht_add_unique_u64(struct lttng_ht *ht,
-               struct lttng_ht_node_u64 *node)
+void lttng_ht_add_unique_u64(struct lttng_ht *ht, struct lttng_ht_node_u64 *node)
 {
        struct cds_lfht_node *node_ptr;
        LTTNG_ASSERT(ht);
@@ -366,19 +355,19 @@ void lttng_ht_add_unique_u64(struct lttng_ht *ht,
        LTTNG_ASSERT(node);
 
        /* RCU read lock protects from ABA. */
-       rcu_read_lock();
+       lttng::urcu::read_lock_guard read_lock;
        node_ptr = cds_lfht_add_unique(ht->ht,
-                       ht->hash_fct(&node->key, lttng_ht_seed), ht->match_fct,
-                       &node->key, &node->node);
-       rcu_read_unlock();
+                                      ht->hash_fct(&node->key, lttng_ht_seed),
+                                      ht->match_fct,
+                                      &node->key,
+                                      &node->node);
        LTTNG_ASSERT(node_ptr == &node->node);
 }
 
 /*
  * Add unique two uint64_t node to hashtable.
  */
-void lttng_ht_add_unique_two_u64(struct lttng_ht *ht,
-               struct lttng_ht_node_two_u64 *node)
+void lttng_ht_add_unique_two_u64(struct lttng_ht *ht, struct lttng_ht_node_two_u64 *node)
 {
        struct cds_lfht_node *node_ptr;
        LTTNG_ASSERT(ht);
@@ -386,11 +375,12 @@ void lttng_ht_add_unique_two_u64(struct lttng_ht *ht,
        LTTNG_ASSERT(node);
 
        /* RCU read lock protects from ABA. */
-       rcu_read_lock();
+       lttng::urcu::read_lock_guard read_lock;
        node_ptr = cds_lfht_add_unique(ht->ht,
-                       ht->hash_fct((void *) &node->key, lttng_ht_seed), ht->match_fct,
-                       (void *) &node->key, &node->node);
-       rcu_read_unlock();
+                                      ht->hash_fct((void *) &node->key, lttng_ht_seed),
+                                      ht->match_fct,
+                                      (void *) &node->key,
+                                      &node->node);
        LTTNG_ASSERT(node_ptr == &node->node);
 }
 
@@ -398,7 +388,7 @@ void lttng_ht_add_unique_two_u64(struct lttng_ht *ht,
  * Add replace unsigned long node to hashtable.
  */
 struct lttng_ht_node_ulong *lttng_ht_add_replace_ulong(struct lttng_ht *ht,
-               struct lttng_ht_node_ulong *node)
+                                                      struct lttng_ht_node_ulong *node)
 {
        struct cds_lfht_node *node_ptr;
        LTTNG_ASSERT(ht);
@@ -406,24 +396,24 @@ struct lttng_ht_node_ulong *lttng_ht_add_replace_ulong(struct lttng_ht *ht,
        LTTNG_ASSERT(node);
 
        /* RCU read lock protects from ABA. */
-       rcu_read_lock();
+       lttng::urcu::read_lock_guard read_lock;
        node_ptr = cds_lfht_add_replace(ht->ht,
-                       ht->hash_fct((void *) node->key, lttng_ht_seed), ht->match_fct,
-                       (void *) node->key, &node->node);
-       rcu_read_unlock();
+                                       ht->hash_fct((void *) node->key, lttng_ht_seed),
+                                       ht->match_fct,
+                                       (void *) node->key,
+                                       &node->node);
        if (!node_ptr) {
-               return NULL;
+               return nullptr;
        } else {
-               return caa_container_of(node_ptr, struct lttng_ht_node_ulong, node);
+               return lttng::utils::container_of(node_ptr, &lttng_ht_node_ulong::node);
        }
-       LTTNG_ASSERT(node_ptr == &node->node);
 }
 
 /*
  * Add replace unsigned long node to hashtable.
  */
 struct lttng_ht_node_u64 *lttng_ht_add_replace_u64(struct lttng_ht *ht,
-               struct lttng_ht_node_u64 *node)
+                                                  struct lttng_ht_node_u64 *node)
 {
        struct cds_lfht_node *node_ptr;
        LTTNG_ASSERT(ht);
@@ -431,17 +421,18 @@ struct lttng_ht_node_u64 *lttng_ht_add_replace_u64(struct lttng_ht *ht,
        LTTNG_ASSERT(node);
 
        /* RCU read lock protects from ABA. */
-       rcu_read_lock();
+       lttng::urcu::read_lock_guard read_lock;
        node_ptr = cds_lfht_add_replace(ht->ht,
-                       ht->hash_fct(&node->key, lttng_ht_seed), ht->match_fct,
-                       &node->key, &node->node);
-       rcu_read_unlock();
+                                       ht->hash_fct(&node->key, lttng_ht_seed),
+                                       ht->match_fct,
+                                       &node->key,
+                                       &node->node);
        if (!node_ptr) {
-               return NULL;
+               return nullptr;
        } else {
-               return caa_container_of(node_ptr, struct lttng_ht_node_u64, node);
+               LTTNG_ASSERT(node_ptr == &node->node);
+               return lttng::utils::container_of(node_ptr, &lttng_ht_node_u64::node);
        }
-       LTTNG_ASSERT(node_ptr == &node->node);
 }
 
 /*
@@ -456,9 +447,8 @@ int lttng_ht_del(struct lttng_ht *ht, struct lttng_ht_iter *iter)
        LTTNG_ASSERT(iter);
 
        /* RCU read lock protects from ABA. */
-       rcu_read_lock();
+       lttng::urcu::read_lock_guard read_lock;
        ret = cds_lfht_del(ht->ht, iter->iter.node);
-       rcu_read_unlock();
        return ret;
 }
 
@@ -498,9 +488,8 @@ unsigned long lttng_ht_get_count(struct lttng_ht *ht)
        LTTNG_ASSERT(ht->ht);
 
        /* RCU read lock protects from ABA and allows RCU traversal. */
-       rcu_read_lock();
+       lttng::urcu::read_lock_guard read_lock;
        cds_lfht_count_nodes(ht->ht, &scb, &count, &sca);
-       rcu_read_unlock();
 
        return count;
 }
@@ -508,63 +497,59 @@ unsigned long lttng_ht_get_count(struct lttng_ht *ht)
 /*
  * Return lttng ht string node from iterator.
  */
-struct lttng_ht_node_str *lttng_ht_iter_get_node_str(
-               struct lttng_ht_iter *iter)
+struct lttng_ht_node_str *lttng_ht_iter_get_node_str(struct lttng_ht_iter *iter)
 {
        struct cds_lfht_node *node;
 
        LTTNG_ASSERT(iter);
        node = cds_lfht_iter_get_node(&iter->iter);
        if (!node) {
-               return NULL;
+               return nullptr;
        }
-       return caa_container_of(node, struct lttng_ht_node_str, node);
+       return lttng::utils::container_of(node, &lttng_ht_node_str::node);
 }
 
 /*
  * Return lttng ht unsigned long node from iterator.
  */
-struct lttng_ht_node_ulong *lttng_ht_iter_get_node_ulong(
-               struct lttng_ht_iter *iter)
+struct lttng_ht_node_ulong *lttng_ht_iter_get_node_ulong(struct lttng_ht_iter *iter)
 {
        struct cds_lfht_node *node;
 
        LTTNG_ASSERT(iter);
        node = cds_lfht_iter_get_node(&iter->iter);
        if (!node) {
-               return NULL;
+               return nullptr;
        }
-       return caa_container_of(node, struct lttng_ht_node_ulong, node);
+       return lttng::utils::container_of(node, &lttng_ht_node_ulong::node);
 }
 
 /*
  * Return lttng ht unsigned long node from iterator.
  */
-struct lttng_ht_node_u64 *lttng_ht_iter_get_node_u64(
-               struct lttng_ht_iter *iter)
+struct lttng_ht_node_u64 *lttng_ht_iter_get_node_u64(struct lttng_ht_iter *iter)
 {
        struct cds_lfht_node *node;
 
        LTTNG_ASSERT(iter);
        node = cds_lfht_iter_get_node(&iter->iter);
        if (!node) {
-               return NULL;
+               return nullptr;
        }
-       return caa_container_of(node, struct lttng_ht_node_u64, node);
+       return lttng::utils::container_of(node, &lttng_ht_node_u64::node);
 }
 
 /*
  * Return lttng ht stream and index id node from iterator.
  */
-struct lttng_ht_node_two_u64 *lttng_ht_iter_get_node_two_u64(
-               struct lttng_ht_iter *iter)
+struct lttng_ht_node_two_u64 *lttng_ht_iter_get_node_two_u64(struct lttng_ht_iter *iter)
 {
        struct cds_lfht_node *node;
 
        LTTNG_ASSERT(iter);
        node = cds_lfht_iter_get_node(&iter->iter);
        if (!node) {
-               return NULL;
+               return nullptr;
        }
-       return caa_container_of(node, struct lttng_ht_node_two_u64, node);
+       return lttng::utils::container_of(node, &lttng_ht_node_two_u64::node);
 }
This page took 0.032216 seconds and 4 git commands to generate.