- ret = _cds_lfht_add(ht, size, node, ADD_REPLACE, 0);
- if (ret == NULL)
- ht_count_add(ht, size);
- return ret;
+ for (;;) {
+ _cds_lfht_add(ht, size, node, &iter, 0);
+ if (iter.node == node) {
+ ht_count_add(ht, size);
+ return NULL;
+ }
+
+ if (!_cds_lfht_replace(ht, size, iter.node, iter.next, node))
+ return iter.node;
+ }