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
ActorImpl::join: react right away if the other actor is already dead
[simgrid.git]
/
src
/
kernel
/
actor
/
ActorImpl.cpp
diff --git
a/src/kernel/actor/ActorImpl.cpp
b/src/kernel/actor/ActorImpl.cpp
index
e1af046
..
f62d97c
100644
(file)
--- a/
src/kernel/actor/ActorImpl.cpp
+++ b/
src/kernel/actor/ActorImpl.cpp
@@
-375,10
+375,15
@@
void ActorImpl::resume()
activity::ActivityImplPtr ActorImpl::join(const ActorImpl* actor, double timeout)
{
activity::ActivityImplPtr sleep = this->sleep(timeout);
activity::ActivityImplPtr ActorImpl::join(const ActorImpl* actor, double timeout)
{
activity::ActivityImplPtr sleep = this->sleep(timeout);
-
actor->on_exit->emplace_back([sleep](bool
) {
+
if (actor->context_->wannadie() || actor->context_->to_be_freed()
) {
if (sleep->surf_action_)
sleep->surf_action_->finish(resource::Action::State::FINISHED);
if (sleep->surf_action_)
sleep->surf_action_->finish(resource::Action::State::FINISHED);
- });
+ } else {
+ actor->on_exit->emplace_back([sleep](bool) {
+ if (sleep->surf_action_)
+ sleep->surf_action_->finish(resource::Action::State::FINISHED);
+ });
+ }
return sleep;
}
return sleep;
}