- XBT_IN("(%p; %p)", this, issuer);
- MC_CHECK_NO_DPOR();
- /* FIXME: check where to validate the arguments */
- RawImplPtr synchro = nullptr;
+ return mutex_->owner_ == issuer_;
+}
+void MutexAcquisitionImpl::wait_for(actor::ActorImpl* issuer, double timeout)
+{
+ xbt_assert(mutex_->owner_ != nullptr); // it was locked either by someone else or by me during the lock_async
+ xbt_assert(
+ issuer == issuer_,
+ "Actors can only wait acquisitions that they created themselves while this one was created by actor id %ld.",
+ issuer_->get_pid());
+ xbt_assert(timeout < 0, "Timeouts on mutex acquisitions are not implemented yet.");
+
+ this->register_simcall(&issuer_->simcall_); // Block on that acquisition
+
+ if (mutex_->get_owner() == issuer_) { // I'm the owner
+ finish();
+ } else {
+ // Already in the queue
+ }
+}
+void MutexAcquisitionImpl::finish()
+{
+ xbt_assert(simcalls_.size() == 1, "Unexpected number of simcalls waiting: %zu", simcalls_.size());
+ smx_simcall_t simcall = simcalls_.front();
+ simcalls_.pop_front();