X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/be3155e24d0c71e2bbd31dd282cfd49bff7290fa..30e90945e7b6b0b08fb0b5ba0fc0dcc12f964a10:/src/simix/smx_process_private.h diff --git a/src/simix/smx_process_private.h b/src/simix/smx_process_private.h index 837cc22d8e..c067fa8a1b 100644 --- a/src/simix/smx_process_private.h +++ b/src/simix/smx_process_private.h @@ -15,6 +15,8 @@ #include #include +#include + #include "simgrid/simix.h" #include "popping_private.h" @@ -39,6 +41,7 @@ public: class Process { public: + Process() : actor_(this) {} // TODO, replace with boost intrusive container hooks s_xbt_swag_hookup_t process_hookup = { nullptr, nullptr }; /* simix_global->process_list */ @@ -54,6 +57,7 @@ public: // TODO, pack them std::exception_ptr exception; + bool finished = false; bool blocked = false; bool suspended = false; bool auto_restart = false; @@ -72,12 +76,14 @@ public: friend void intrusive_ptr_add_ref(Process* process) { + // Atomic operation! Do not split in two instructions! auto previous = (process->refcount_)++; xbt_assert(previous != 0); (void) previous; } friend void intrusive_ptr_release(Process* process) { + // Atomic operation! Do not split in two instructions! auto count = --(process->refcount_); if (count == 0) delete process; @@ -85,8 +91,11 @@ public: ~Process(); + simgrid::s4u::Actor& actor() { return actor_; } + private: std::atomic_int_fast32_t refcount_ { 1 }; + simgrid::s4u::Actor actor_; }; }