static void test_insert_get_remove() { struct cuckoo *c = cuckoo_new(); ASSERT(c != NULL); for (int i = 0; i < TEST_INSERTS; ++i) ASSERT(cuckoo_insert(c, i, TEST_VAL(i)) == 0); for (int i = 0; i < TEST_INSERTS; ++i) ASSERT(cuckoo_get(c, i) == TEST_VAL(i)); for (int i = 0; i < TEST_INSERTS; ++i) ASSERT(cuckoo_remove(c, i) == TEST_VAL(i)); for (int i = 0; i < TEST_INSERTS; ++i) ASSERT(cuckoo_remove(c, i) == NULL); for (int i = 0; i < TEST_INSERTS; ++i) ASSERT(cuckoo_get(c, i) == NULL); cuckoo_delete(c); }
/* * pmemobj_close -- close a transactional memory pool */ void pmemobj_close(PMEMobjpool *pop) { LOG(3, "pop %p", pop); _pobj_cache_invalidate++; if (cuckoo_remove(pools, pop->uuid_lo) != pop) { ERR("!cuckoo_remove"); } if (_pobj_cached_pool.pop == pop) { _pobj_cached_pool.pop = NULL; _pobj_cached_pool.uuid_lo = 0; } pmemobj_cleanup(pop); }
/* * pmemobj_close -- close a transactional memory pool */ void pmemobj_close(PMEMobjpool *pop) { LOG(3, "pop %p", pop); _pobj_cache_invalidate++; if (cuckoo_remove(pools_ht, pop->uuid_lo) != pop) { ERR("cuckoo_remove"); } if (ctree_remove(pools_tree, (uint64_t)pop, 1) != (uint64_t)pop) { ERR("ctree_remove"); } if (_pobj_cached_pool.pop == pop) { _pobj_cached_pool.pop = NULL; _pobj_cached_pool.uuid_lo = 0; } pmemobj_cleanup(pop); }
/* * lane_info_cleanup -- remove lane info record regarding pool being deleted */ static inline void lane_info_cleanup(PMEMobjpool *pop) { if (unlikely(Lane_info_ht == NULL)) return; struct lane_info *info = cuckoo_remove(Lane_info_ht, pop->uuid_lo); if (likely(info != NULL)) { if (info->prev) info->prev->next = info->next; if (info->next) info->next->prev = info->prev; if (Lane_info_cache == info) Lane_info_cache = NULL; if (Lane_info_records == info) Lane_info_records = info->next; Free(info); } }