X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/98cb31d0eba0219ec3409b93dc647d453d103fb9..3f6cb16e7427d1583ab346042e2f27f7cd95f2b8:/src/kernel/context/ContextThread.cpp diff --git a/src/kernel/context/ContextThread.cpp b/src/kernel/context/ContextThread.cpp index be6f65ddcb..008f641cc5 100644 --- a/src/kernel/context/ContextThread.cpp +++ b/src/kernel/context/ContextThread.cpp @@ -58,9 +58,8 @@ void ThreadContextFactory::run_all() // ThreadContext -ThreadContext::ThreadContext(std::function code, void_pfn_smxprocess_t cleanup, smx_actor_t process, - bool maestro) - : AttachContext(std::move(code), cleanup, process), is_maestro_(maestro) +ThreadContext::ThreadContext(std::function code, void_pfn_smxprocess_t cleanup, smx_actor_t actor, bool maestro) + : AttachContext(std::move(code), cleanup, actor), is_maestro_(maestro) { // We do not need the semaphores when maestro is in main, // but creating them anyway simplifies things when maestro is externalized @@ -118,12 +117,13 @@ void *ThreadContext::wrapper(void *param) (*context)(); } catch (StopRequest const&) { XBT_DEBUG("Caught a StopRequest"); - xbt_assert(not context->is_maestro(), "I'm not supposed to be maestro here."); + xbt_assert(not context->is_maestro(), "Maestro shall not receive StopRequests, even when detached."); } catch (simgrid::Exception const& e) { XBT_INFO("Actor killed by an uncatched exception %s", simgrid::xbt::demangle(typeid(e).name()).get()); throw; } - context->Context::stop(); + if (not context->is_maestro()) // Just in case somebody detached maestro + context->Context::stop(); // Signal to the caller (normally the maestro) that we have finished: context->yield();