A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Delay creation of parmap for boost contexts too.
[simgrid.git]
/
src
/
kernel
/
context
/
ContextBoost.cpp
diff --git
a/src/kernel/context/ContextBoost.cpp
b/src/kernel/context/ContextBoost.cpp
index
237de08
..
f39f1d5
100644
(file)
--- 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
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<smx_actor_t>(nthreads, SIMIX_context_get_parallel_mode());
+ BoostContext::parmap_ = nullptr;
BoostContext::workers_context_.clear();
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
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
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
}
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 HAVE_THREAD_CONTEXTS
if (BoostContext::parallel_) {
BoostContext::threads_working_ = 0;
+ if (not BoostContext::parmap_)
+ BoostContext::parmap_ =
+ new simgrid::xbt::Parmap<smx_actor_t>(SIMIX_context_get_nthreads(), SIMIX_context_get_parallel_mode());
BoostContext::parmap_->apply(
[](smx_actor_t process) {
BoostContext* context = static_cast<BoostContext*>(process->context);
BoostContext::parmap_->apply(
[](smx_actor_t process) {
BoostContext* context = static_cast<BoostContext*>(process->context);