- if (not this->locked)
- THROWF(mismatch_error, 0, "Cannot release that mutex: it was not locked.");
-
- /* If the mutex is not owned by the issuer, that's not good */
- if (issuer != this->owner)
- THROWF(mismatch_error, 0, "Cannot release that mutex: it was locked by %s (pid:%ld), not by you.",
- this->owner->getCname(), this->owner->pid);
-
- if (not this->sleeping.empty()) {
- /*process to wake up */
- smx_actor_t p = &this->sleeping.front();
- this->sleeping.pop_front();
- p->waiting_synchro = nullptr;
- this->owner = p;
- SIMIX_simcall_answer(&p->simcall);
+ xbt_assert(locked_, "Cannot release that mutex: it was not locked.");
+ xbt_assert(issuer == owner_, "Cannot release that mutex: it was locked by %s (pid:%ld), not by you.",
+ owner_->get_cname(), owner_->get_pid());
+
+ if (not sleeping_.empty()) {
+ /* Give the ownership to the first waiting actor */
+ owner_ = &sleeping_.front();
+ sleeping_.pop_front();
+ owner_->waiting_synchro = nullptr;
+ owner_->simcall_answer();