X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/891abf1a3579d0e378a6e1b3426e5c34b23a58ad..905e26b959375a249abcfdf1599f6178fe031f44:/src/simix/smx_process_private.h diff --git a/src/simix/smx_process_private.h b/src/simix/smx_process_private.h index 837cc22d8e..bcfe57a018 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_; }; } @@ -121,11 +130,8 @@ XBT_PRIVATE void SIMIX_process_change_host(smx_process_t process, XBT_PRIVATE smx_synchro_t SIMIX_process_suspend(smx_process_t process, smx_process_t issuer); XBT_PRIVATE void SIMIX_process_resume(smx_process_t process, smx_process_t issuer); XBT_PRIVATE int SIMIX_process_get_PID(smx_process_t self); -XBT_PRIVATE int SIMIX_process_get_PPID(smx_process_t self); XBT_PRIVATE void* SIMIX_process_get_data(smx_process_t process); XBT_PRIVATE void SIMIX_process_set_data(smx_process_t process, void *data); -XBT_PRIVATE sg_host_t SIMIX_process_get_host(smx_process_t process); -XBT_PRIVATE const char* SIMIX_process_get_name(smx_process_t process); XBT_PRIVATE smx_process_t SIMIX_process_get_by_name(const char* name); XBT_PRIVATE int SIMIX_process_is_suspended(smx_process_t process); XBT_PRIVATE xbt_dict_t SIMIX_process_get_properties(smx_process_t process);