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
Fix a race condition in SwappedCtx parallel exec
[simgrid.git]
/
src
/
kernel
/
context
/
ContextRaw.cpp
diff --git
a/src/kernel/context/ContextRaw.cpp
b/src/kernel/context/ContextRaw.cpp
index
da01b41
..
3b29062
100644
(file)
--- a/
src/kernel/context/ContextRaw.cpp
+++ b/
src/kernel/context/ContextRaw.cpp
@@
-200,13
+200,12
@@
RawContext::RawContext(std::function<void()> code, void_pfn_smxprocess_t cleanup
{
if (has_code()) {
#if PTH_STACKGROWTH == -1
- ASAN_ONLY(this->asan_stack_ = static_cast<char*>(
this->stack_
) + smx_context_usable_stack_size);
+ ASAN_ONLY(this->asan_stack_ = static_cast<char*>(
get_stack()
) + smx_context_usable_stack_size);
#else
- ASAN_ONLY(this->asan_stack_ =
this->stack_
);
+ ASAN_ONLY(this->asan_stack_ =
get_stack()
);
#endif
- this->stack_top_ = raw_makecontext(
this->stack_
, smx_context_usable_stack_size, RawContext::wrapper, this);
+ this->stack_top_ = raw_makecontext(
get_stack()
, smx_context_usable_stack_size, RawContext::wrapper, this);
} else {
- set_maestro(this); // save maestro for run_all()
if (MC_is_active())
MC_ignore_heap(&stack_top_, sizeof(stack_top_));
}
@@
-234,10
+233,10
@@
void RawContext::swap_into(SwappedContext* to_)
{
RawContext* to = static_cast<RawContext*>(to_);
ASAN_ONLY(void* fake_stack = nullptr);
- ASAN_ONLY(to->asan_ctx_ =
from
);
- ASAN_START_SWITCH(
from
->asan_stop_ ? nullptr : &fake_stack, to->asan_stack_, to->asan_stack_size_);
+ ASAN_ONLY(to->asan_ctx_ =
this
);
+ ASAN_START_SWITCH(
this
->asan_stop_ ? nullptr : &fake_stack, to->asan_stack_, to->asan_stack_size_);
raw_swapcontext(&this->stack_top_, to->stack_top_);
- ASAN_FINISH_SWITCH(fake_stack, &
from->asan_ctx_->asan_stack_, &from
->asan_ctx_->asan_stack_size_);
+ ASAN_FINISH_SWITCH(fake_stack, &
this->asan_ctx_->asan_stack_, &this
->asan_ctx_->asan_stack_size_);
}
ContextFactory* raw_factory()