X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f5792a3bf76ce15a573ae5e9c63097595ae5f2bd..7f0086121716cf77e2c0ee605e0400358ed56609:/src/kernel/context/ContextThread.cpp diff --git a/src/kernel/context/ContextThread.cpp b/src/kernel/context/ContextThread.cpp index 4ed2f29012..02b9bca7ad 100644 --- a/src/kernel/context/ContextThread.cpp +++ b/src/kernel/context/ContextThread.cpp @@ -58,7 +58,7 @@ void ThreadContextFactory::run_all() { if (smx_ctx_thread_sem == nullptr) { // Serial execution - for (smx_actor_t process : simix_global->process_to_run) { + for (smx_actor_t const& process : simix_global->process_to_run) { XBT_DEBUG("Handling %p",process); ThreadContext* context = static_cast(process->context); xbt_os_sem_release(context->begin_); @@ -66,9 +66,9 @@ void ThreadContextFactory::run_all() } } else { // Parallel execution - for (smx_actor_t process : simix_global->process_to_run) + for (smx_actor_t const& process : simix_global->process_to_run) xbt_os_sem_release(static_cast(process->context)->begin_); - for (smx_actor_t process : simix_global->process_to_run) + for (smx_actor_t const& process : simix_global->process_to_run) xbt_os_sem_acquire(static_cast(process->context)->end_); } } @@ -179,6 +179,10 @@ void *ThreadContext::maestro_wrapper(void *param) // Tell main that we have finished: xbt_os_sem_release(context->end_); +#ifndef WIN32 + stack.ss_flags = SS_DISABLE; + sigaltstack(&stack, nullptr); +#endif return nullptr; } @@ -198,6 +202,11 @@ void ThreadContext::stop() // Signal to the maestro that it has finished: xbt_os_sem_release(this->end_); +#ifndef WIN32 + stack_t stack = {}; + stack.ss_flags = SS_DISABLE; + sigaltstack(&stack, nullptr); +#endif xbt_os_thread_exit(nullptr); }