/** * Internal implementation of the wait call. */ void wait_impl(mutex &lock) { PMEMobjpool *pop = pmemobj_pool_by_ptr(this); if (int ret = pmemobj_cond_wait(pop, &this->pcond, lock.native_handle())) throw lock_error(ret, std::system_category(), "Error waiting on a condition " "variable."); }
/* * cond_check_worker -- (internal) check consistency with cond variable */ static void * cond_check_worker(void *arg) { for (unsigned run = 0; run < WORKER_RUNS; run++) { if (pmemobj_mutex_lock(&Mock_pop, &Test_obj->mutex)) return NULL; while (Test_obj->check_data != 1) { if (pmemobj_cond_wait(&Mock_pop, &Test_obj->cond, &Test_obj->mutex)) UT_ERR("pmemobj_cond_wait"); } uint8_t val = Test_obj->data[0]; for (int i = 1; i < DATA_SIZE; i++) UT_ASSERTeq(Test_obj->data[i], val); memset(Test_obj->data, 0, DATA_SIZE); pmemobj_mutex_unlock(&Mock_pop, &Test_obj->mutex); } return NULL; }