X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6e61cc20ca52787c594d66511e37d4c7a13d511b..7e42dd535dfc0d68de20fba4b9fc5e480b56c74b:/src/kernel/context/Context.cpp diff --git a/src/kernel/context/Context.cpp b/src/kernel/context/Context.cpp index a5de192f1e..63321ebb8d 100644 --- a/src/kernel/context/Context.cpp +++ b/src/kernel/context/Context.cpp @@ -34,9 +34,14 @@ ContextFactoryInitializer factory_initializer = nullptr; ContextFactory::~ContextFactory() = default; -Context* ContextFactory::self() +static thread_local smx_context_t smx_current_context = nullptr; +Context* Context::self() { - return SIMIX_context_get_current(); + return smx_current_context; +} +void Context::set_current(Context* self) +{ + smx_current_context = self; } void Context::declare_context(std::size_t size) @@ -69,10 +74,14 @@ Context::Context(std::function code, void_pfn_smxprocess_t cleanup_func, if (has_code()) this->cleanup_func_ = cleanup_func; else - SIMIX_context_set_current(this); + set_current(this); } -Context::~Context() = default; +Context::~Context() +{ + if (self() == this) + set_current(nullptr); +} void Context::stop() { @@ -94,13 +103,3 @@ void SIMIX_context_runall() { simix_global->context_factory->run_all(); } - -/** @brief returns the current running context */ -smx_context_t SIMIX_context_self() -{ - if (simix_global && simix_global->context_factory) - return simix_global->context_factory->self(); - else - return nullptr; -} -