X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=blobdiff_plain;f=folly%2FExecutor.h;h=a2ac0d6358089e7f4330f626180f125ebdb78c49;hp=a66777f4a85840133d4b318ab38ea5f11a08c5c0;hb=989c511267f61b5b172c92f39a05f1bf35392ab5;hpb=6f3b7616f3402355441c62ca60a36159435aa818 diff --git a/folly/Executor.h b/folly/Executor.h index a66777f4..a2ac0d63 100644 --- a/folly/Executor.h +++ b/folly/Executor.h @@ -28,7 +28,8 @@ using Func = Function; /// threadsafe. class Executor { public: - virtual ~Executor() = default; + // Workaround for a linkage problem with explicitly defaulted dtor t22914621 + virtual ~Executor() {} /// Enqueue a function to executed by this executor. This and all /// variants must be threadsafe. @@ -46,16 +47,6 @@ class Executor { static const int8_t MID_PRI = 0; static const int8_t HI_PRI = SCHAR_MAX; - /// A convenience function for shared_ptr to legacy functors. - /// - /// Sometimes you have a functor that is move-only, and therefore can't be - /// converted to a std::function (e.g. std::packaged_task). In that case, - /// wrap it in a shared_ptr (or maybe folly::MoveWrapper) and use this. - template - void addPtr(P fn) { - this->add([fn]() mutable { (*fn)(); }); - } - class KeepAlive { public: KeepAlive() {} @@ -68,6 +59,10 @@ class Executor { return executor_ != nullptr; } + Executor* get() const { + return executor_.get(); + } + private: friend class Executor; explicit KeepAlive(folly::Executor* executor) : executor_(executor) {} @@ -90,6 +85,7 @@ class Executor { } protected: + virtual void keepAliveAcquire(); virtual void keepAliveRelease(); KeepAlive makeKeepAlive() {