From b686073e4e6991ea9ae4154a13bf693acd738551 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Mon, 1 Aug 2016 22:55:03 +0200 Subject: [PATCH] very preliminary cleanups in the contextes damn this code got cluttered over the years --- src/kernel/context/Context.hpp | 8 ----- src/kernel/context/ContextThread.cpp | 3 +- src/simix/smx_context.cpp | 54 +++++++++++++--------------- 3 files changed, 27 insertions(+), 38 deletions(-) diff --git a/src/kernel/context/Context.hpp b/src/kernel/context/Context.hpp index 45e02236fc..eab87f8071 100644 --- a/src/kernel/context/Context.hpp +++ b/src/kernel/context/Context.hpp @@ -35,8 +35,6 @@ #include #include "src/simix/ActorImpl.hpp" -#ifdef __cplusplus - #include namespace simgrid { @@ -149,12 +147,6 @@ XBT_PRIVATE ContextFactory* boost_factory(); typedef simgrid::kernel::context::ContextFactory *smx_context_factory_t; -#else - -typedef struct s_smx_context_factory *smx_context_factory_t; - -#endif - SG_BEGIN_DECL() diff --git a/src/kernel/context/ContextThread.cpp b/src/kernel/context/ContextThread.cpp index 0dbc048335..bef60c90e1 100644 --- a/src/kernel/context/ContextThread.cpp +++ b/src/kernel/context/ContextThread.cpp @@ -98,7 +98,8 @@ ThreadContext::ThreadContext(std::function code, void_pfn_smxprocess_t cleanup, smx_process_t process, bool maestro) : AttachContext(std::move(code), cleanup, process) { - // We do not need the semaphores when maestro is in main, but we create them anyway for simplicity wrt the case where maestro is externalized + // We do not need the semaphores when maestro is in main, + // but creating them anyway simplifies things when maestro is externalized this->begin_ = xbt_os_sem_init(0); this->end_ = xbt_os_sem_init(0); diff --git a/src/simix/smx_context.cpp b/src/simix/smx_context.cpp index db956825a5..148f66ea42 100644 --- a/src/simix/smx_context.cpp +++ b/src/simix/smx_context.cpp @@ -60,8 +60,7 @@ static std::paircontext_factory == nullptr); + #if HAVE_THREAD_CONTEXTS && !HAVE_THREAD_LOCAL_STORAGE /* the __thread storage class is not available on this platform: * use getspecific/setspecific instead to store the current context in each thread */ xbt_os_thread_key_create(&smx_current_context_key); #endif - if (simix_global->context_factory) - return; + /* select the context factory to use to create the contexts */ if (simgrid::kernel::context::factory_initializer) { // Give Java a chance to hijack the factory mechanism simix_global->context_factory = simgrid::kernel::context::factory_initializer(); @@ -141,8 +118,27 @@ void SIMIX_context_mod_init(void) simix_global->context_factory = factory.second(); break; } - if (simix_global->context_factory == nullptr) - invalid_context_factory(); + + if (simix_global->context_factory == nullptr) { + XBT_ERROR("Invalid context factory specified. Valid factories on this machine:"); +#if HAVE_RAW_CONTEXTS + XBT_ERROR(" raw: high performance context factory implemented specifically for SimGrid"); +#else + XBT_ERROR(" (raw contexts were disabled at compilation time on this machine -- check configure logs for details)"); +#endif +#if HAVE_UCONTEXT_CONTEXTS + XBT_ERROR(" ucontext: classical system V contexts (implemented with makecontext, swapcontext and friends)"); +#else + XBT_ERROR(" (ucontext was disabled at compilation time on this machine -- check configure logs for details)"); +#endif +#if HAVE_BOOST_CONTEXTS + XBT_ERROR(" boost: this uses the boost libraries context implementation"); +#else + XBT_ERROR(" (boost was disabled at compilation time on this machine -- check configure logs for details. Did you install the libboost-context-dev package?)"); +#endif + XBT_ERROR(" thread: slow portability layer using pthreads as provided by gcc"); + xbt_die("Please use a valid factory."); + } } /** -- 2.20.1