- activity::ActivityImplPtr sleep = this->sleep(timeout);
- actor->on_exit->emplace_back([sleep](bool) {
- if (sleep->surf_action_)
- sleep->surf_action_->finish(resource::Action::State::FINISHED);
- });
- return sleep;
+ activity::ActivityImplPtr sleep_activity = this->sleep(timeout);
+ if (actor->wannadie() || actor->to_be_freed()) {
+ if (sleep_activity->surf_action_)
+ sleep_activity->surf_action_->finish(resource::Action::State::FINISHED);
+ } else {
+ actor->on_exit->emplace_back([sleep_activity](bool) {
+ if (sleep_activity->surf_action_)
+ sleep_activity->surf_action_->finish(resource::Action::State::FINISHED);
+ });
+ }
+ return sleep_activity;