X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5e3adb6026f929615076da0e5a32dc35a02db573..05736ee0ede974fcf9fb60a13a40c50d62fcc19d:/src/kernel/context/ContextBoost.cpp diff --git a/src/kernel/context/ContextBoost.cpp b/src/kernel/context/ContextBoost.cpp index 17fd4c87ea..8fe39e2538 100644 --- a/src/kernel/context/ContextBoost.cpp +++ b/src/kernel/context/ContextBoost.cpp @@ -21,13 +21,14 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context); namespace simgrid { -namespace simix { +namespace kernel { +namespace context { class BoostSerialContext : public BoostContext { public: BoostSerialContext(std::function code, void_pfn_smxprocess_t cleanup_func, - smx_process_t process) + smx_actor_t process) : BoostContext(std::move(code), cleanup_func, process) {} void stop() override; void suspend() override; @@ -38,7 +39,7 @@ class BoostParallelContext : public BoostContext { public: BoostParallelContext(std::function code, void_pfn_smxprocess_t cleanup_func, - smx_process_t process) + smx_actor_t process) : BoostContext(std::move(code), cleanup_func, process) {} void stop() override; void suspend() override; @@ -86,7 +87,7 @@ BoostContextFactory::~BoostContextFactory() } smx_context_t BoostContextFactory::create_context(std::function code, - void_pfn_smxprocess_t cleanup_func, smx_process_t process) + void_pfn_smxprocess_t cleanup_func, smx_actor_t process) { BoostContext* context = nullptr; if (BoostContext::parallel_) @@ -109,7 +110,7 @@ void BoostContextFactory::run_all() BoostContext::threads_working_ = 0; xbt_parmap_apply(BoostContext::parmap_, [](void* arg) { - smx_process_t process = static_cast(arg); + smx_actor_t process = static_cast(arg); BoostContext* context = static_cast(process->context); return context->resume(); }, @@ -117,8 +118,10 @@ void BoostContextFactory::run_all() } else #endif { - smx_process_t first_process = - xbt_dynar_get_as(simix_global->process_to_run, 0, smx_process_t); + if (xbt_dynar_is_empty(simix_global->process_to_run)) + return; + smx_actor_t first_process = + xbt_dynar_get_as(simix_global->process_to_run, 0, smx_actor_t); BoostContext::process_index_ = 1; /* execute the first process */ static_cast(first_process->context)->resume(); @@ -136,7 +139,7 @@ static void smx_ctx_boost_wrapper(std::intptr_t arg) } BoostContext::BoostContext(std::function code, - void_pfn_smxprocess_t cleanup_func, smx_process_t process) + void_pfn_smxprocess_t cleanup_func, smx_actor_t process) : Context(std::move(code), cleanup_func, process) { @@ -201,7 +204,7 @@ void BoostSerialContext::suspend() /* execute the next process */ XBT_DEBUG("Run next process"); next_context = static_cast(xbt_dynar_get_as( - simix_global->process_to_run, i, smx_process_t)->context); + simix_global->process_to_run, i, smx_actor_t)->context); } else { /* all processes were run, return to maestro */ @@ -231,7 +234,7 @@ void BoostSerialContext::stop() void BoostParallelContext::suspend() { - smx_process_t next_work = (smx_process_t) xbt_parmap_next(parmap_); + smx_actor_t next_work = (smx_actor_t) xbt_parmap_next(parmap_); BoostParallelContext* next_context = nullptr; if (next_work != nullptr) { @@ -289,5 +292,4 @@ XBT_PRIVATE ContextFactory* boost_factory() return new BoostContextFactory(); } -} -} +}}} // namespace