/** * Notify and unblock one thread waiting on `*this` condition. * * Does nothing when no threads are waiting. It is unspecified * which thread is selected for unblocking. * * @throw lock_error when the signal fails on the #pcond. */ void notify_one() { PMEMobjpool *pop = pmemobj_pool_by_ptr(this); if (int ret = pmemobj_cond_signal(pop, &this->pcond)) throw lock_error(ret, std::system_category(), "Error notifying one on " "a condition variable."); }
/* * cond_write_worker -- (internal) write data with cond variable */ static void * cond_write_worker(void *arg) { for (unsigned run = 0; run < WORKER_RUNS; run++) { if (pmemobj_mutex_lock(&Mock_pop, &Test_obj->mutex)) return NULL; memset(Test_obj->data, (int)(uintptr_t)arg, DATA_SIZE); Test_obj->check_data = 1; if (pmemobj_cond_signal(&Mock_pop, &Test_obj->cond)) UT_ERR("pmemobj_cond_signal"); pmemobj_mutex_unlock(&Mock_pop, &Test_obj->mutex); } return NULL; }