X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/50315369ab3f6921a3c6c6a266cf1d25b9c56b4d..4f76cb02e1d37e95f8e9a14fd4fc84f4b27f7661:/src/mc/transition/TransitionSynchro.cpp diff --git a/src/mc/transition/TransitionSynchro.cpp b/src/mc/transition/TransitionSynchro.cpp index dbd39a5de7..21ea4ec8af 100644 --- a/src/mc/transition/TransitionSynchro.cpp +++ b/src/mc/transition/TransitionSynchro.cpp @@ -29,7 +29,11 @@ bool BarrierTransition::depends(const Transition* o) const if (o->type_ < type_) return o->depends(this); - if (auto* other = dynamic_cast(o)) { + // Actions executed by the same actor are always dependent + if (o->aid_ == aid_) + return true; + + if (const auto* other = dynamic_cast(o)) { if (bar_ != other->bar_) return false; @@ -69,7 +73,7 @@ bool MutexTransition::depends(const Transition* o) const // type_ <= other->type_ in MUTEX_LOCK, MUTEX_TEST, MUTEX_TRYLOCK, MUTEX_UNLOCK, MUTEX_WAIT, - if (auto* other = dynamic_cast(o)) { + if (const auto* other = dynamic_cast(o)) { // Theorem 4.4.7: Any pair of synchronization actions of distinct actors concerning distinct mutexes are independent if (mutex_ != other->mutex_) return false; @@ -121,7 +125,11 @@ bool SemaphoreTransition::depends(const Transition* o) const if (o->type_ < type_) return o->depends(this); - if (auto* other = dynamic_cast(o)) { + // Actions executed by the same actor are always dependent + if (o->aid_ == aid_) + return true; + + if (const auto* other = dynamic_cast(o)) { if (sem_ != other->sem_) return false;