From: Arnaud Giersch Date: Wed, 13 Sep 2017 13:05:33 +0000 (+0200) Subject: Delay creation of parmap for boost contexts too. X-Git-Tag: v3_17~128 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/afaf38d31c666bd960c0ca714c93c65fbb1a3a6d?ds=sidebyside Delay creation of parmap for boost contexts too. --- diff --git a/src/kernel/context/ContextBoost.cpp b/src/kernel/context/ContextBoost.cpp index 237de080f3..f39f1d5213 100644 --- a/src/kernel/context/ContextBoost.cpp +++ b/src/kernel/context/ContextBoost.cpp @@ -63,10 +63,9 @@ BoostContextFactory::BoostContextFactory() BoostContext::parallel_ = SIMIX_context_is_parallel(); if (BoostContext::parallel_) { #if HAVE_THREAD_CONTEXTS - int nthreads = SIMIX_context_get_nthreads(); - BoostContext::parmap_ = new simgrid::xbt::Parmap(nthreads, SIMIX_context_get_parallel_mode()); + BoostContext::parmap_ = nullptr; BoostContext::workers_context_.clear(); - BoostContext::workers_context_.resize(nthreads, nullptr); + BoostContext::workers_context_.resize(SIMIX_context_get_nthreads(), nullptr); BoostContext::maestro_context_ = nullptr; xbt_os_thread_key_create(&BoostContext::worker_id_key_); #else @@ -78,10 +77,8 @@ BoostContextFactory::BoostContextFactory() BoostContextFactory::~BoostContextFactory() { #if HAVE_THREAD_CONTEXTS - if (BoostContext::parmap_) { - delete BoostContext::parmap_; - BoostContext::parmap_ = nullptr; - } + delete BoostContext::parmap_; + BoostContext::parmap_ = nullptr; BoostContext::workers_context_.clear(); #endif } @@ -106,6 +103,9 @@ void BoostContextFactory::run_all() #if HAVE_THREAD_CONTEXTS if (BoostContext::parallel_) { BoostContext::threads_working_ = 0; + if (not BoostContext::parmap_) + BoostContext::parmap_ = + new simgrid::xbt::Parmap(SIMIX_context_get_nthreads(), SIMIX_context_get_parallel_mode()); BoostContext::parmap_->apply( [](smx_actor_t process) { BoostContext* context = static_cast(process->context);