fiber->state_ == Fiber::READY_TO_RUN);
currentFiber_ = fiber;
if (observer_) {
- observer_->starting();
+ observer_->starting(reinterpret_cast<uintptr_t>(fiber));
}
while (fiber->state_ == Fiber::NOT_STARTED ||
awaitFunc_(*fiber);
awaitFunc_ = nullptr;
if (observer_) {
- observer_->stopped();
+ observer_->stopped(reinterpret_cast<uintptr_t>(fiber));
}
currentFiber_ = nullptr;
} else if (fiber->state_ == Fiber::INVALID) {
}
// Make sure LocalData is not accessible from its destructor
if (observer_) {
- observer_->stopped();
+ observer_->stopped(reinterpret_cast<uintptr_t>(fiber));
}
currentFiber_ = nullptr;
fiber->localData_.reset();
}
} else if (fiber->state_ == Fiber::YIELDED) {
if (observer_) {
- observer_->stopped();
+ observer_->stopped(reinterpret_cast<uintptr_t>(fiber));
}
currentFiber_ = nullptr;
fiber->state_ = Fiber::READY_TO_RUN;
fiber->setFunction(std::move(task->func));
fiber->data_ = reinterpret_cast<intptr_t>(fiber);
+ if (observer_) {
+ observer_->runnable(reinterpret_cast<uintptr_t>(fiber));
+ }
runReadyFiber(fiber);
hadRemoteFiber = true;
}
);
}
+ if (observer_) {
+ for (auto& yielded : yieldedFibers_) {
+ observer_->runnable(reinterpret_cast<uintptr_t>(&yielded));
+ }
+ }
readyFibers_.splice(readyFibers_.end(), yieldedFibers_);
return fibersActive_ > 0;
fiber->data_ = reinterpret_cast<intptr_t>(fiber);
readyFibers_.push_back(*fiber);
+ if (observer_) {
+ observer_->runnable(reinterpret_cast<uintptr_t>(fiber));
+ }
ensureLoopScheduled();
}
fiber->data_ = reinterpret_cast<intptr_t>(fiber);
readyFibers_.push_back(*fiber);
+ if (observer_) {
+ observer_->runnable(reinterpret_cast<uintptr_t>(fiber));
+ }
ensureLoopScheduled();
}