X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f5792a3bf76ce15a573ae5e9c63097595ae5f2bd..1fc042e8bc9c51f9267fa1936deaebe59ae01ee7:/src/kernel/context/ContextRaw.cpp diff --git a/src/kernel/context/ContextRaw.cpp b/src/kernel/context/ContextRaw.cpp index 53726aa300..1df1de7fdb 100644 --- a/src/kernel/context/ContextRaw.cpp +++ b/src/kernel/context/ContextRaw.cpp @@ -7,8 +7,8 @@ #include "xbt/parmap.hpp" -#include "src/simix/smx_private.h" #include "mc/mc.h" +#include "src/simix/smx_private.hpp" XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context); @@ -270,7 +270,7 @@ RawContextFactory::RawContextFactory() raw_workers_context = xbt_new(RawContext*, nthreads); raw_maestro_context = nullptr; #endif - // TODO, if(SIMIX_context_get_parallel_threshold() > 1) => choose dynamically + // TODO: choose dynamically when SIMIX_context_get_parallel_threshold() > 1 } } @@ -291,8 +291,13 @@ RawContext* RawContextFactory::create_context(std::function code, void RawContext::wrapper(void* arg) { RawContext* context = static_cast(arg); - (*context)(); - context->stop(); + try { + (*context)(); + context->Context::stop(); + } catch (StopRequest const&) { + XBT_DEBUG("Caught a StopRequest"); + } + context->suspend(); } RawContext::RawContext(std::function code, @@ -323,7 +328,7 @@ RawContext::~RawContext() void RawContext::stop() { Context::stop(); - this->suspend(); + throw StopRequest(); } void RawContextFactory::run_all()