From: Martin Quinson Date: Sat, 5 Jan 2019 01:02:31 +0000 (+0100) Subject: unify how threaded and parallelisable context factories find context_self X-Git-Tag: v3_22~685 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/c68caf0f27b0fdde9df0a39857e5a162fc196d85?ds=sidebyside unify how threaded and parallelisable context factories find context_self --- diff --git a/src/bindings/java/JavaContext.cpp b/src/bindings/java/JavaContext.cpp index 5fe1c0cfab..937f70745a 100644 --- a/src/bindings/java/JavaContext.cpp +++ b/src/bindings/java/JavaContext.cpp @@ -34,11 +34,6 @@ JavaContextFactory::JavaContextFactory(): ContextFactory("JavaContextFactory") JavaContextFactory::~JavaContextFactory()=default; -JavaContext* JavaContextFactory::self() -{ - return static_cast(xbt_os_thread_get_extra_data()); -} - JavaContext* JavaContextFactory::create_context(std::function code, void_pfn_smxprocess_t cleanup_fun, smx_actor_t actor) { @@ -58,7 +53,7 @@ JavaContext::JavaContext(std::function code, void_pfn_smxprocess_t clean void JavaContext::start_hook() { - xbt_os_thread_set_extra_data(this); // We need to attach it also for maestro, in contrary to our ancestor + SIMIX_context_set_current(this); // We need to attach it also for maestro, in contrary to our ancestor //Attach the thread to the JVM JNIEnv *env; diff --git a/src/bindings/java/JavaContext.hpp b/src/bindings/java/JavaContext.hpp index 0a07f01358..5458cc1461 100644 --- a/src/bindings/java/JavaContext.hpp +++ b/src/bindings/java/JavaContext.hpp @@ -45,7 +45,6 @@ class JavaContextFactory : public simgrid::kernel::context::ContextFactory { public: JavaContextFactory(); ~JavaContextFactory() override; - JavaContext* self() override; JavaContext* create_context(std::function code, void_pfn_smxprocess_t, smx_actor_t process) override; void run_all() override; diff --git a/src/bindings/java/jmsg.cpp b/src/bindings/java/jmsg.cpp index 5ff074acd6..7987779dcd 100644 --- a/src/bindings/java/jmsg.cpp +++ b/src/bindings/java/jmsg.cpp @@ -50,7 +50,7 @@ JavaVM *__java_vm = nullptr; JNIEnv *get_current_thread_env() { using simgrid::kernel::context::JavaContext; - JavaContext* ctx = static_cast(xbt_os_thread_get_extra_data()); + JavaContext* ctx = static_cast(SIMIX_context_self()); return ctx->jenv_; } diff --git a/src/kernel/context/Context.hpp b/src/kernel/context/Context.hpp index c543f410cc..0f4a2b0451 100644 --- a/src/kernel/context/Context.hpp +++ b/src/kernel/context/Context.hpp @@ -35,7 +35,7 @@ public: virtual void run_all() = 0; /** @brief Returns the current context of this thread. */ - virtual Context* self(); + Context* self(); std::string const& name() const { return name_; } protected: diff --git a/src/kernel/context/ContextThread.cpp b/src/kernel/context/ContextThread.cpp index ab202159bd..c93e361daf 100644 --- a/src/kernel/context/ContextThread.cpp +++ b/src/kernel/context/ContextThread.cpp @@ -78,7 +78,7 @@ ThreadContext::ThreadContext(std::function code, void_pfn_smxprocess_t c /* Otherwise, we attach to the current thread */ else { - xbt_os_thread_set_extra_data(this); + SIMIX_context_set_current(this); } } @@ -91,6 +91,7 @@ ThreadContext::~ThreadContext() void *ThreadContext::wrapper(void *param) { ThreadContext* context = static_cast(param); + SIMIX_context_set_current(context); #ifndef WIN32 /* Install alternate signal stack, for SIGSEGV handler. */ @@ -177,7 +178,7 @@ void ThreadContext::attach_stop() ThreadContext* maestro = (ThreadContext*)simix_global->maestro_process->context_; maestro->end_.acquire(); - xbt_os_thread_set_extra_data(nullptr); + SIMIX_context_set_current(nullptr); } // SerialThreadContext diff --git a/src/kernel/context/ContextThread.hpp b/src/kernel/context/ContextThread.hpp index 5024b6ff4c..1f9d06e773 100644 --- a/src/kernel/context/ContextThread.hpp +++ b/src/kernel/context/ContextThread.hpp @@ -87,7 +87,6 @@ public: return create_context(std::move(code), cleanup_func, process, maestro); } void run_all() override; - ThreadContext* self() override { return static_cast(xbt_os_thread_get_extra_data()); } // Optional methods: ThreadContext* attach(void_pfn_smxprocess_t cleanup_func, smx_actor_t process) override