From 808e54f22311d5860c361a961f2eb72feede0729 Mon Sep 17 00:00:00 2001 From: Andrii Grynenko Date: Tue, 26 Jul 2016 14:45:42 -0700 Subject: [PATCH] Support custom loop runner for EventBaseLoopController Summary: This allows having some logic executed before and after FiberManager loop (e.g. grabbing a Python GIL). Reviewed By: A5he Differential Revision: D3616752 fbshipit-source-id: 3be35d54ced458328816d583133457a44a863acd --- folly/fibers/EventBaseLoopController-inl.h | 7 +++++-- folly/fibers/EventBaseLoopController.h | 8 ++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/folly/fibers/EventBaseLoopController-inl.h b/folly/fibers/EventBaseLoopController-inl.h index c9109c99..0e4c2fd7 100644 --- a/folly/fibers/EventBaseLoopController-inl.h +++ b/folly/fibers/EventBaseLoopController-inl.h @@ -15,7 +15,6 @@ */ #include #include -#include namespace folly { namespace fibers { @@ -63,7 +62,11 @@ inline void EventBaseLoopController::cancel() { } inline void EventBaseLoopController::runLoop() { - fm_->loopUntilNoReady(); + if (loopRunner_) { + loopRunner_->run([&] { fm_->loopUntilNoReady(); }); + } else { + fm_->loopUntilNoReady(); + } } inline void EventBaseLoopController::scheduleThreadSafe( diff --git a/folly/fibers/EventBaseLoopController.h b/folly/fibers/EventBaseLoopController.h index 4d4ca998..f1c41287 100644 --- a/folly/fibers/EventBaseLoopController.h +++ b/folly/fibers/EventBaseLoopController.h @@ -15,6 +15,7 @@ */ #pragma once +#include #include #include #include @@ -27,8 +28,6 @@ class EventBase; namespace folly { namespace fibers { -class FiberManager; - class EventBaseLoopController : public LoopController { public: explicit EventBaseLoopController(); @@ -43,6 +42,10 @@ class EventBaseLoopController : public LoopController { return eventBase_; } + void setLoopRunner(InlineFunctionRunner* loopRunner) { + loopRunner_ = loopRunner; + } + private: class ControllerCallback : public folly::EventBase::LoopCallback { public: @@ -93,6 +96,7 @@ class EventBaseLoopController : public LoopController { FiberManager* fm_{nullptr}; std::atomic eventBaseAttached_{false}; std::weak_ptr aliveWeak_; + InlineFunctionRunner* loopRunner_{nullptr}; /* LoopController interface */ -- 2.34.1