Commit 09446426 authored by Yedidya Feldblum's avatar Yedidya Feldblum Committed by Facebook Github Bot

Put the current fiber manager behind an accessor

Summary: [Folly] Put the current fiber manager behind an accessor function v.s. having it as a static class member.

Reviewed By: andriigrynenko

Differential Revision: D19229507

fbshipit-source-id: 7cf4eab00ee281bc6104f994a71f5e48d9553852
parent ac05b70a
......@@ -78,12 +78,15 @@ struct hash<folly::fibers::FiberManager::Options> {
namespace folly {
namespace fibers {
FOLLY_TLS FiberManager* FiberManager::currentFiberManager_ = nullptr;
auto FiberManager::FrozenOptions::create(const Options& options) -> ssize_t {
return std::hash<Options>()(options);
}
/* static */ FiberManager*& FiberManager::getCurrentFiberManager() {
static FOLLY_TLS FiberManager* currentFiberManager;
return currentFiberManager;
}
FiberManager::FiberManager(
std::unique_ptr<LoopController> loopController,
Options options)
......
......@@ -202,7 +202,7 @@ void FiberManager::runFibersHelper(LoopFunc&& loopFunc) {
#endif
// Support nested FiberManagers
auto originalFiberManager = std::exchange(currentFiberManager_, this);
auto originalFiberManager = std::exchange(getCurrentFiberManager(), this);
numUncaughtExceptions_ = uncaught_exceptions();
currentException_ = std::current_exception();
......@@ -227,7 +227,7 @@ void FiberManager::runFibersHelper(LoopFunc&& loopFunc) {
if (!readyFibers_.empty()) {
ensureLoopScheduled();
}
std::swap(currentFiberManager_, originalFiberManager);
std::swap(getCurrentFiberManager(), originalFiberManager);
CHECK_EQ(this, originalFiberManager);
};
......@@ -534,12 +534,12 @@ invoke_result_t<F> FiberManager::runInMainContext(F&& func) {
}
inline FiberManager& FiberManager::getFiberManager() {
assert(currentFiberManager_ != nullptr);
return *currentFiberManager_;
assert(getCurrentFiberManager() != nullptr);
return *getCurrentFiberManager();
}
inline FiberManager* FiberManager::getFiberManagerUnsafe() {
return currentFiberManager_;
return getCurrentFiberManager();
}
inline bool FiberManager::hasActiveFiber() const {
......@@ -547,7 +547,7 @@ inline bool FiberManager::hasActiveFiber() const {
}
inline void FiberManager::yield() {
assert(currentFiberManager_ == this);
assert(getCurrentFiberManager() == this);
assert(activeFiber_ != nullptr);
assert(activeFiber_->state_ == Fiber::RUNNING);
activeFiber_->preempt(Fiber::YIELDED);
......
......@@ -490,7 +490,7 @@ class FiberManager : public ::folly::Executor {
* When we are inside FiberManager loop this points to FiberManager. Otherwise
* it's nullptr
*/
static FOLLY_TLS FiberManager* currentFiberManager_;
static FiberManager*& getCurrentFiberManager();
/**
* Allocator used to allocate stack for Fibers in the pool.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment