X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=rculfhash.c;h=1afccfdfc1378ad295cbcbc8f7cec0861b800a9b;hb=e224628499d5396c5b2942ab43993ba99b207c4d;hp=b114e0c1e3f5e9afe56e985da2f6122551cc1f4f;hpb=79d5479e9f6dfe097fc24b0ddf2fe7fd1ba0f43b;p=urcu.git diff --git a/rculfhash.c b/rculfhash.c index b114e0c..1afccfd 100644 --- a/rculfhash.c +++ b/rculfhash.c @@ -150,12 +150,14 @@ */ #define _LGPL_SOURCE +#define _GNU_SOURCE #include #include #include #include #include #include +#include #include "config.h" #include @@ -1553,6 +1555,11 @@ int cds_lfht_del(struct cds_lfht *ht, struct cds_lfht_node *node) return ret; } +int cds_lfht_is_node_deleted(struct cds_lfht_node *node) +{ + return is_removed(rcu_dereference(node->next)); +} + static int cds_lfht_delete_bucket(struct cds_lfht *ht) { @@ -1775,6 +1782,11 @@ void __cds_lfht_resize_lazy_launch(struct cds_lfht *ht) return; } work = malloc(sizeof(*work)); + if (work == NULL) { + dbg_printf("error allocating resize work, bailing out\n"); + uatomic_dec(&ht->in_progress_resize); + return; + } work->ht = ht; ht->flavor->update_call_rcu(&work->head, do_resize_cb); CMM_STORE_SHARED(ht->resize_initiated, 1);