X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b214b15ec055be50978640d04708fb5f64abe53c..19aa33ec87e87e1ed8f4742cc4dd60aedb837892:/src/kernel/activity/MutexImpl.hpp diff --git a/src/kernel/activity/MutexImpl.hpp b/src/kernel/activity/MutexImpl.hpp index f372ea76d5..fa291d3bb4 100644 --- a/src/kernel/activity/MutexImpl.hpp +++ b/src/kernel/activity/MutexImpl.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2012-2021. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -18,6 +18,9 @@ class XBT_PUBLIC MutexImpl { std::atomic_int_fast32_t refcount_{1}; s4u::Mutex piface_; bool locked_ = false; + actor::ActorImpl* owner_ = nullptr; + // List of sleeping actors: + actor::SynchroList sleeping_; public: MutexImpl() : piface_(this) {} @@ -27,14 +30,13 @@ public: void lock(actor::ActorImpl* issuer); bool try_lock(actor::ActorImpl* issuer); void unlock(actor::ActorImpl* issuer); - bool is_locked() { return locked_; } + bool is_locked() const { return locked_; } MutexImpl* ref(); void unref(); - actor::ActorImpl* owner_ = nullptr; - // List of sleeping actors: - actor::SynchroList sleeping_; + void remove_sleeping_actor(actor::ActorImpl& actor) { xbt::intrusive_erase(sleeping_, actor); } + actor::ActorImpl* get_owner() const { return owner_; } // boost::intrusive_ptr support: friend void intrusive_ptr_add_ref(MutexImpl* mutex)