X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=urcu%2Frculfhash.h;h=afd0c3eafb34aff325843ea476b4714d90e86fe5;hb=d7a0f2fe29db52a5dff734a922ac33654f865836;hp=0496662e209c250f0e11ea1e83cecd25eaa06eae;hpb=969143888baf25e15bbba7f5dec78479be3588b2;p=urcu.git diff --git a/urcu/rculfhash.h b/urcu/rculfhash.h index 0496662..afd0c3e 100644 --- a/urcu/rculfhash.h +++ b/urcu/rculfhash.h @@ -118,6 +118,7 @@ extern const struct cds_lfht_mm_type cds_lfht_mm_mmap; /* * _cds_lfht_new - API used by cds_lfht_new wrapper. Do not use directly. */ +extern struct cds_lfht *_cds_lfht_new(unsigned long init_size, unsigned long min_nr_alloc_buckets, unsigned long max_nr_buckets, @@ -176,8 +177,10 @@ struct cds_lfht *cds_lfht_new(unsigned long init_size, * Return 0 on success, negative error value on error. * Threads calling this API need to be registered RCU read-side threads. * cds_lfht_destroy should *not* be called from a RCU read-side critical - * section. + * section. It should *not* be called from a call_rcu thread context + * neither. */ +extern int cds_lfht_destroy(struct cds_lfht *ht, pthread_attr_t **attr); /* @@ -190,6 +193,7 @@ int cds_lfht_destroy(struct cds_lfht *ht, pthread_attr_t **attr); * Call with rcu_read_lock held. * Threads calling this API need to be registered RCU read-side threads. */ +extern void cds_lfht_count_nodes(struct cds_lfht *ht, long *split_count_before, unsigned long *count, @@ -207,6 +211,7 @@ void cds_lfht_count_nodes(struct cds_lfht *ht, * Threads calling this API need to be registered RCU read-side threads. * This function acts as a rcu_dereference() to read the node pointer. */ +extern void cds_lfht_lookup(struct cds_lfht *ht, unsigned long hash, cds_lfht_match_fct match, const void *key, struct cds_lfht_iter *iter); @@ -231,6 +236,7 @@ void cds_lfht_lookup(struct cds_lfht *ht, unsigned long hash, * Threads calling this API need to be registered RCU read-side threads. * This function acts as a rcu_dereference() to read the node pointer. */ +extern void cds_lfht_next_duplicate(struct cds_lfht *ht, cds_lfht_match_fct match, const void *key, struct cds_lfht_iter *iter); @@ -245,6 +251,7 @@ void cds_lfht_next_duplicate(struct cds_lfht *ht, * Threads calling this API need to be registered RCU read-side threads. * This function acts as a rcu_dereference() to read the node pointer. */ +extern void cds_lfht_first(struct cds_lfht *ht, struct cds_lfht_iter *iter); /* @@ -259,6 +266,7 @@ void cds_lfht_first(struct cds_lfht *ht, struct cds_lfht_iter *iter); * Threads calling this API need to be registered RCU read-side threads. * This function acts as a rcu_dereference() to read the node pointer. */ +extern void cds_lfht_next(struct cds_lfht *ht, struct cds_lfht_iter *iter); /* @@ -273,6 +281,7 @@ void cds_lfht_next(struct cds_lfht *ht, struct cds_lfht_iter *iter); * This function issues a full memory barrier before and after its * atomic commit. */ +extern void cds_lfht_add(struct cds_lfht *ht, unsigned long hash, struct cds_lfht_node *node); @@ -303,6 +312,7 @@ void cds_lfht_add(struct cds_lfht *ht, unsigned long hash, * node pointer. The failure case does not guarantee any other memory * barrier. */ +extern struct cds_lfht_node *cds_lfht_add_unique(struct cds_lfht *ht, unsigned long hash, cds_lfht_match_fct match, @@ -339,6 +349,7 @@ struct cds_lfht_node *cds_lfht_add_unique(struct cds_lfht *ht, * This function issues a full memory barrier before and after its * atomic commit. */ +extern struct cds_lfht_node *cds_lfht_add_replace(struct cds_lfht *ht, unsigned long hash, cds_lfht_match_fct match, @@ -374,6 +385,7 @@ struct cds_lfht_node *cds_lfht_add_replace(struct cds_lfht *ht, * after its atomic commit. Upon failure, this function does not issue * any memory barrier. */ +extern int cds_lfht_replace(struct cds_lfht *ht, struct cds_lfht_iter *old_iter, unsigned long hash, @@ -402,6 +414,7 @@ int cds_lfht_replace(struct cds_lfht *ht, * after its atomic commit. Upon failure, this function does not issue * any memory barrier. */ +extern int cds_lfht_del(struct cds_lfht *ht, struct cds_lfht_node *node); /* @@ -417,6 +430,7 @@ int cds_lfht_del(struct cds_lfht *ht, struct cds_lfht_node *node); * Threads calling this API need to be registered RCU read-side threads. * This function does not issue any memory barrier. */ +extern int cds_lfht_is_node_deleted(struct cds_lfht_node *node); /* @@ -426,7 +440,10 @@ int cds_lfht_is_node_deleted(struct cds_lfht_node *node); * * Threads calling this API need to be registered RCU read-side threads. * This function does not (necessarily) issue memory barriers. + * cds_lfht_resize should *not* be called from a RCU read-side critical + * section. */ +extern void cds_lfht_resize(struct cds_lfht *ht, unsigned long new_size); /*