X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/55a08c7439db5b0335a5b26e40b3a46e1e03d3e8..107322c3cf7cb1c0c5836c79c2c8803276afd77f:/src/kernel/context/Context.hpp diff --git a/src/kernel/context/Context.hpp b/src/kernel/context/Context.hpp index 7dc642024e..e9bea4bc42 100644 --- a/src/kernel/context/Context.hpp +++ b/src/kernel/context/Context.hpp @@ -18,7 +18,7 @@ namespace context { class XBT_PUBLIC ContextFactory { public: - explicit ContextFactory() {} + explicit ContextFactory() = default; ContextFactory(const ContextFactory&) = delete; ContextFactory& operator=(const ContextFactory&) = delete; virtual ~ContextFactory(); @@ -34,7 +34,7 @@ public: protected: template T* new_context(Args&&... args) { - T* context = new T(std::forward(args)...); + auto* context = new T(std::forward(args)...); context->declare_context(sizeof(T)); return context; } @@ -43,12 +43,18 @@ protected: class XBT_PUBLIC Context { friend ContextFactory; + static thread_local Context* current_context_; + std::function code_; actor::ActorImpl* actor_ = nullptr; bool iwannadie_ = false; void declare_context(std::size_t size); public: +#ifndef WIN32 + static int install_sigsegv_stack(stack_t* old_stack, bool enable); +#endif + Context(std::function&& code, actor::ActorImpl* actor); Context(const Context&) = delete; Context& operator=(const Context&) = delete; @@ -101,12 +107,6 @@ XBT_PRIVATE ContextFactory* boost_factory(); } // namespace kernel } // namespace simgrid -typedef simgrid::kernel::context::ContextFactory *smx_context_factory_t; - XBT_PRIVATE void SIMIX_context_mod_init(); XBT_PRIVATE void SIMIX_context_mod_exit(); - -#ifndef WIN32 -XBT_PUBLIC_DATA unsigned char sigsegv_stack[SIGSTKSZ]; -#endif #endif