X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5eeb3c843b60e9ba5e1a952ffe83df2a4d8f5fa0..05b84555fa616971fccb6579c2e7b4f2321c42b9:/src/kernel/context/Context.hpp diff --git a/src/kernel/context/Context.hpp b/src/kernel/context/Context.hpp index 674f02d050..5c9de3ec0d 100644 --- a/src/kernel/context/Context.hpp +++ b/src/kernel/context/Context.hpp @@ -6,11 +6,15 @@ #ifndef SIMGRID_KERNEL_CONTEXT_CONTEXT_HPP #define SIMGRID_KERNEL_CONTEXT_CONTEXT_HPP +#include "simgrid/forward.h" #include "src/internal_config.h" -#include "src/simix/smx_network_private.hpp" +#include "src/kernel/activity/ActivityImpl.hpp" #include +/* Process creation/destruction callbacks */ +typedef void (*void_pfn_smxprocess_t)(smx_actor_t); + namespace simgrid { namespace kernel { namespace context { @@ -24,13 +28,9 @@ public: virtual ~ContextFactory(); virtual Context* create_context(std::function code, void_pfn_smxprocess_t cleanup, smx_actor_t process) = 0; - // Optional methods for attaching main() as a context: - - /** Creates a context from the current context of execution - * - * This will not work on all implementation of `ContextFactory`. - */ + /** Turn the current thread into a simulation context */ virtual Context* attach(void_pfn_smxprocess_t cleanup_func, smx_actor_t process); + /** Turn the current thread into maestro (the old maestro becomes a regular actor) */ virtual Context* create_maestro(std::function code, smx_actor_t process); virtual void run_all() = 0; @@ -52,17 +52,23 @@ class XBT_PUBLIC Context { private: std::function code_; void_pfn_smxprocess_t cleanup_func_ = nullptr; - smx_actor_t process_ = nullptr; + smx_actor_t actor_ = nullptr; public: class StopRequest { /** @brief Exception launched to kill a process, in order to properly unwind its stack and release RAII stuff * - * Nope, Sonar, this should not inherit of std::exception. + * Nope, Sonar, this should not inherit of std::exception nor of simgrid::Exception. * Otherwise, users may accidentally catch it with a try {} catch (std::exception) */ + public: + StopRequest() = default; + explicit StopRequest(std::string msg) : msg_(msg) {} + + private: + std::string msg_; }; - bool iwannadie; + bool iwannadie = false; Context(std::function code, void_pfn_smxprocess_t cleanup_func, smx_actor_t process); Context(const Context&) = delete; @@ -70,7 +76,7 @@ public: void operator()() { code_(); } bool has_code() const { return static_cast(code_); } - smx_actor_t process() { return this->process_; } + smx_actor_t process() { return this->actor_; } void set_cleanup(void_pfn_smxprocess_t cleanup) { cleanup_func_ = cleanup; } // Virtual methods @@ -81,8 +87,8 @@ public: class XBT_PUBLIC AttachContext : public Context { public: - AttachContext(std::function code, void_pfn_smxprocess_t cleanup_func, smx_actor_t process) - : Context(std::move(code), cleanup_func, process) + AttachContext(std::function code, void_pfn_smxprocess_t cleanup_func, smx_actor_t actor) + : Context(std::move(code), cleanup_func, actor) { }