static void test_realloc(size_t org, size_t dest) { int err; struct palloc_heap *heap = &mock_pop->heap; err = pmalloc(mock_pop, &addr->ptr, org); UT_ASSERTeq(err, 0); UT_ASSERT(palloc_usable_size(heap, addr->ptr) >= org); err = prealloc(mock_pop, &addr->ptr, dest); UT_ASSERTeq(err, 0); UT_ASSERT(palloc_usable_size(heap, addr->ptr) >= dest); pfree(mock_pop, &addr->ptr); }
/* * pvector_pop_back -- decreases the number of values and executes * a user-defined callback in which the caller must zero the value. */ uint64_t pvector_pop_back(struct pvector_context *ctx, entry_op_callback cb) { if (ctx->nvalues == 0) return 0; uint64_t idx = ctx->nvalues - 1; struct array_spec s = pvector_get_array_spec(idx); uint64_t *arrp = OBJ_OFF_TO_PTR(ctx->pop, ctx->vec->arrays[s.idx]); uint64_t ret = arrp[s.pos]; if (cb) cb(ctx->pop, &arrp[s.pos]); if (s.pos == 0 && s.idx != 0 /* the array 0 is embedded */) { #ifdef USE_VG_PMEMCHECK if (On_valgrind) { size_t usable_size = palloc_usable_size(&ctx->pop->heap, ctx->vec->arrays[s.idx]); VALGRIND_REMOVE_FROM_TX(arrp, usable_size); } #endif pfree(ctx->pop, &ctx->vec->arrays[s.idx]); } ctx->nvalues--; return ret; }