projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: max_t/min_t macros are missing cast on input
[lttng-tools.git]
/
src
/
common
/
hashtable
/
hashtable.c
diff --git
a/src/common/hashtable/hashtable.c
b/src/common/hashtable/hashtable.c
index d1049d1e2b9dea53b9747a0bcaf8cea4108833cd..4fb19cffda923bf1f19062be891f6180f0e48c14 100644
(file)
--- a/
src/common/hashtable/hashtable.c
+++ b/
src/common/hashtable/hashtable.c
@@
-15,7
+15,6
@@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#define _GNU_SOURCE
#define _LGPL_SOURCE
#include <assert.h>
#include <string.h>
#define _LGPL_SOURCE
#include <assert.h>
#include <string.h>
@@
-28,6
+27,9
@@
#include "hashtable.h"
#include "utils.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;
unsigned long lttng_ht_seed;
static unsigned long min_hash_alloc_size = 1;
@@
-87,6
+89,7
@@
static int match_two_u64(struct cds_lfht_node *node, const void *key)
/*
* Return an allocated lttng hashtable.
*/
/*
* Return an allocated lttng hashtable.
*/
+LTTNG_HIDDEN
struct lttng_ht *lttng_ht_new(unsigned long size, int type)
{
struct lttng_ht *ht;
struct lttng_ht *lttng_ht_new(unsigned long size, int type)
{
struct lttng_ht *ht;
@@
-95,6
+98,13
@@
struct lttng_ht *lttng_ht_new(unsigned long size, int type)
if (!size)
size = DEFAULT_HT_SIZE;
if (!size)
size = DEFAULT_HT_SIZE;
+ pthread_mutex_lock(&seed_lock);
+ if (!seed_init) {
+ lttng_ht_seed = (unsigned long) time(NULL);
+ seed_init = true;
+ }
+ pthread_mutex_unlock(&seed_lock);
+
ht = zmalloc(sizeof(*ht));
if (ht == NULL) {
PERROR("zmalloc lttng_ht");
ht = zmalloc(sizeof(*ht));
if (ht == NULL) {
PERROR("zmalloc lttng_ht");
@@
-143,6
+153,7
@@
error:
/*
* Free a lttng hashtable.
*/
/*
* Free a lttng hashtable.
*/
+LTTNG_HIDDEN
void lttng_ht_destroy(struct lttng_ht *ht)
{
int ret;
void lttng_ht_destroy(struct lttng_ht *ht)
{
int ret;
@@
-155,6
+166,7
@@
void lttng_ht_destroy(struct lttng_ht *ht)
/*
* Init lttng ht node string.
*/
/*
* Init lttng ht node string.
*/
+LTTNG_HIDDEN
void lttng_ht_node_init_str(struct lttng_ht_node_str *node, char *key)
{
assert(node);
void lttng_ht_node_init_str(struct lttng_ht_node_str *node, char *key)
{
assert(node);
@@
-166,6
+178,7
@@
void lttng_ht_node_init_str(struct lttng_ht_node_str *node, char *key)
/*
* Init lttng ht node unsigned long.
*/
/*
* Init lttng ht node unsigned long.
*/
+LTTNG_HIDDEN
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)
{
@@
-178,6
+191,7
@@
void lttng_ht_node_init_ulong(struct lttng_ht_node_ulong *node,
/*
* Init lttng ht node uint64_t.
*/
/*
* Init lttng ht node uint64_t.
*/
+LTTNG_HIDDEN
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)
{
@@
-190,6
+204,7
@@
void lttng_ht_node_init_u64(struct lttng_ht_node_u64 *node,
/*
* Init lttng ht node with two uint64_t.
*/
/*
* Init lttng ht node with two uint64_t.
*/
+LTTNG_HIDDEN
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)
{
@@
-203,6
+218,7
@@
void lttng_ht_node_init_two_u64(struct lttng_ht_node_two_u64 *node,
/*
* Free lttng ht node string.
*/
/*
* Free lttng ht node string.
*/
+LTTNG_HIDDEN
void lttng_ht_node_free_str(struct lttng_ht_node_str *node)
{
assert(node);
void lttng_ht_node_free_str(struct lttng_ht_node_str *node)
{
assert(node);
@@
-212,6
+228,7
@@
void lttng_ht_node_free_str(struct lttng_ht_node_str *node)
/*
* Free lttng ht node unsigned long.
*/
/*
* Free lttng ht node unsigned long.
*/
+LTTNG_HIDDEN
void lttng_ht_node_free_ulong(struct lttng_ht_node_ulong *node)
{
assert(node);
void lttng_ht_node_free_ulong(struct lttng_ht_node_ulong *node)
{
assert(node);
@@
-221,6
+238,7
@@
void lttng_ht_node_free_ulong(struct lttng_ht_node_ulong *node)
/*
* Free lttng ht node uint64_t.
*/
/*
* Free lttng ht node uint64_t.
*/
+LTTNG_HIDDEN
void lttng_ht_node_free_u64(struct lttng_ht_node_u64 *node)
{
assert(node);
void lttng_ht_node_free_u64(struct lttng_ht_node_u64 *node)
{
assert(node);
@@
-230,6
+248,7
@@
void lttng_ht_node_free_u64(struct lttng_ht_node_u64 *node)
/*
* Free lttng ht node two uint64_t.
*/
/*
* Free lttng ht node two uint64_t.
*/
+LTTNG_HIDDEN
void lttng_ht_node_free_two_u64(struct lttng_ht_node_two_u64 *node)
{
assert(node);
void lttng_ht_node_free_two_u64(struct lttng_ht_node_two_u64 *node)
{
assert(node);
@@
-239,6
+258,7
@@
void lttng_ht_node_free_two_u64(struct lttng_ht_node_two_u64 *node)
/*
* Lookup function in hashtable.
*/
/*
* Lookup function in hashtable.
*/
+LTTNG_HIDDEN
void lttng_ht_lookup(struct lttng_ht *ht, void *key,
struct lttng_ht_iter *iter)
{
void lttng_ht_lookup(struct lttng_ht *ht, void *key,
struct lttng_ht_iter *iter)
{
@@
-252,6
+272,7
@@
void lttng_ht_lookup(struct lttng_ht *ht, void *key,
/*
* Add unique string node to hashtable.
*/
/*
* Add unique string node to hashtable.
*/
+LTTNG_HIDDEN
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)
{
@@
-271,6
+292,7
@@
void lttng_ht_add_unique_str(struct lttng_ht *ht,
/*
* Add string node to hashtable.
*/
/*
* Add string node to hashtable.
*/
+LTTNG_HIDDEN
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)
{
@@
-288,6
+310,7
@@
void lttng_ht_add_str(struct lttng_ht *ht,
/*
* Add unsigned long node to hashtable.
*/
/*
* Add unsigned long node to hashtable.
*/
+LTTNG_HIDDEN
void lttng_ht_add_ulong(struct lttng_ht *ht, struct lttng_ht_node_ulong *node)
{
assert(ht);
void lttng_ht_add_ulong(struct lttng_ht *ht, struct lttng_ht_node_ulong *node)
{
assert(ht);
@@
-303,8
+326,8
@@
void lttng_ht_add_ulong(struct lttng_ht *ht, struct lttng_ht_node_ulong *node)
/*
* Add uint64_t node to hashtable.
/*
* Add uint64_t node to hashtable.
-
*/
*/
+LTTNG_HIDDEN
void lttng_ht_add_u64(struct lttng_ht *ht, struct lttng_ht_node_u64 *node)
{
assert(ht);
void lttng_ht_add_u64(struct lttng_ht *ht, struct lttng_ht_node_u64 *node)
{
assert(ht);
@@
-321,6
+344,7
@@
void lttng_ht_add_u64(struct lttng_ht *ht, struct lttng_ht_node_u64 *node)
/*
* Add unique unsigned long node to hashtable.
*/
/*
* Add unique unsigned long node to hashtable.
*/
+LTTNG_HIDDEN
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)
{
@@
-341,6
+365,7
@@
void lttng_ht_add_unique_ulong(struct lttng_ht *ht,
/*
* Add unique uint64_t node to hashtable.
*/
/*
* Add unique uint64_t node to hashtable.
*/
+LTTNG_HIDDEN
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)
{
@@
-361,6
+386,7
@@
void lttng_ht_add_unique_u64(struct lttng_ht *ht,
/*
* Add unique two uint64_t node to hashtable.
*/
/*
* Add unique two uint64_t node to hashtable.
*/
+LTTNG_HIDDEN
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)
{
@@
-381,6
+407,7
@@
void lttng_ht_add_unique_two_u64(struct lttng_ht *ht,
/*
* Add replace unsigned long node to hashtable.
*/
/*
* Add replace unsigned long node to hashtable.
*/
+LTTNG_HIDDEN
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 *lttng_ht_add_replace_ulong(struct lttng_ht *ht,
struct lttng_ht_node_ulong *node)
{
@@
-406,6
+433,7
@@
struct lttng_ht_node_ulong *lttng_ht_add_replace_ulong(struct lttng_ht *ht,
/*
* Add replace unsigned long node to hashtable.
*/
/*
* Add replace unsigned long node to hashtable.
*/
+LTTNG_HIDDEN
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 *lttng_ht_add_replace_u64(struct lttng_ht *ht,
struct lttng_ht_node_u64 *node)
{
@@
-431,6
+459,7
@@
struct lttng_ht_node_u64 *lttng_ht_add_replace_u64(struct lttng_ht *ht,
/*
* Delete node from hashtable.
*/
/*
* Delete node from hashtable.
*/
+LTTNG_HIDDEN
int lttng_ht_del(struct lttng_ht *ht, struct lttng_ht_iter *iter)
{
int ret;
int lttng_ht_del(struct lttng_ht *ht, struct lttng_ht_iter *iter)
{
int ret;
@@
-449,6
+478,7
@@
int lttng_ht_del(struct lttng_ht *ht, struct lttng_ht_iter *iter)
/*
* Get first node in the hashtable.
*/
/*
* Get first node in the hashtable.
*/
+LTTNG_HIDDEN
void lttng_ht_get_first(struct lttng_ht *ht, struct lttng_ht_iter *iter)
{
assert(ht);
void lttng_ht_get_first(struct lttng_ht *ht, struct lttng_ht_iter *iter)
{
assert(ht);
@@
-461,6
+491,7
@@
void lttng_ht_get_first(struct lttng_ht *ht, struct lttng_ht_iter *iter)
/*
* Get next node in the hashtable.
*/
/*
* Get next node in the hashtable.
*/
+LTTNG_HIDDEN
void lttng_ht_get_next(struct lttng_ht *ht, struct lttng_ht_iter *iter)
{
assert(ht);
void lttng_ht_get_next(struct lttng_ht *ht, struct lttng_ht_iter *iter)
{
assert(ht);
@@
-473,6
+504,7
@@
void lttng_ht_get_next(struct lttng_ht *ht, struct lttng_ht_iter *iter)
/*
* Return the number of nodes in the hashtable.
*/
/*
* Return the number of nodes in the hashtable.
*/
+LTTNG_HIDDEN
unsigned long lttng_ht_get_count(struct lttng_ht *ht)
{
long scb, sca;
unsigned long lttng_ht_get_count(struct lttng_ht *ht)
{
long scb, sca;
@@
-492,6
+524,7
@@
unsigned long lttng_ht_get_count(struct lttng_ht *ht)
/*
* Return lttng ht string node from iterator.
*/
/*
* Return lttng ht string node from iterator.
*/
+LTTNG_HIDDEN
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)
{
@@
-508,6
+541,7
@@
struct lttng_ht_node_str *lttng_ht_iter_get_node_str(
/*
* Return lttng ht unsigned long node from iterator.
*/
/*
* Return lttng ht unsigned long node from iterator.
*/
+LTTNG_HIDDEN
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)
{
@@
-524,6
+558,7
@@
struct lttng_ht_node_ulong *lttng_ht_iter_get_node_ulong(
/*
* Return lttng ht unsigned long node from iterator.
*/
/*
* Return lttng ht unsigned long node from iterator.
*/
+LTTNG_HIDDEN
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)
{
@@
-540,6
+575,7
@@
struct lttng_ht_node_u64 *lttng_ht_iter_get_node_u64(
/*
* Return lttng ht stream and index id node from iterator.
*/
/*
* Return lttng ht stream and index id node from iterator.
*/
+LTTNG_HIDDEN
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)
{
@@
-552,12
+588,3
@@
struct lttng_ht_node_two_u64 *lttng_ht_iter_get_node_two_u64(
}
return caa_container_of(node, struct lttng_ht_node_two_u64, node);
}
}
return caa_container_of(node, struct lttng_ht_node_two_u64, node);
}
-
-/*
- * lib constructor
- */
-static void __attribute__((constructor)) _init(void)
-{
- /* Init hash table seed */
- lttng_ht_seed = (unsigned long) time(NULL);
-}
This page took
0.032151 seconds
and
5
git commands to generate.