/* * 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_check -- transactional memory pool consistency check */ int pmemobj_check(const char *path, const char *layout) { LOG(3, "path %s layout %s", path, layout); PMEMobjpool *pop = pmemobj_open_common(path, layout, 1, 0); if (pop == NULL) return -1; /* errno set by pmemobj_open_common() */ int consistent = 1; /* * For replicated pools, basic consistency check is performed * in pmemobj_open_common(). */ if (pop->replica == NULL) consistent = pmemobj_check_basic(pop); if (consistent && (errno = pmemobj_boot(pop)) != 0) { LOG(3, "!pmemobj_boot"); consistent = 0; } if (consistent) { pmemobj_cleanup(pop); } else { /* unmap all the replicas */ PMEMobjpool *rep; do { rep = pop->replica; VALGRIND_REMOVE_PMEM_MAPPING(pop->addr, pop->size); util_unmap(pop->addr, pop->size); pop = rep; } while (pop); } if (consistent) LOG(4, "pool consistency check OK"); return consistent; }
/* * 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); }