Make Loop and LoopData only hold move-only functions

This commit is contained in:
Alex Hultman
2019-01-23 12:26:33 +01:00
parent 91925ccc37
commit 95478c906f
2 changed files with 10 additions and 8 deletions
+6 -6
View File
@@ -110,25 +110,25 @@ public:
} }
/* Set postCb callback */ /* Set postCb callback */
void setPostHandler(std::function<void(Loop *)> handler) { void setPostHandler(fu2::unique_function<void(Loop *)> &&handler) {
LoopData *loopData = (LoopData *) us_loop_ext((us_loop *) this); LoopData *loopData = (LoopData *) us_loop_ext((us_loop *) this);
loopData->postHandler = handler; loopData->postHandler = std::move(handler);
} }
void setPreHandler(std::function<void(Loop *)> handler) { void setPreHandler(fu2::unique_function<void(Loop *)> &&handler) {
LoopData *loopData = (LoopData *) us_loop_ext((us_loop *) this); LoopData *loopData = (LoopData *) us_loop_ext((us_loop *) this);
loopData->preHandler = handler; loopData->preHandler = std::move(handler);
} }
/* Defer this callback on Loop's thread of execution */ /* Defer this callback on Loop's thread of execution */
void defer(std::function<void()> cb) { void defer(fu2::unique_function<void()> &&cb) {
LoopData *loopData = (LoopData *) us_loop_ext((us_loop *) this); LoopData *loopData = (LoopData *) us_loop_ext((us_loop *) this);
//if (std::thread::get_id() == ) // todo: add fast path for same thread id //if (std::thread::get_id() == ) // todo: add fast path for same thread id
loopData->deferMutex.lock(); loopData->deferMutex.lock();
loopData->deferQueues[loopData->currentDeferQueue].emplace_back(cb); loopData->deferQueues[loopData->currentDeferQueue].emplace_back(std::move(cb));
loopData->deferMutex.unlock(); loopData->deferMutex.unlock();
us_wakeup_loop((us_loop *) this); us_wakeup_loop((us_loop *) this);
+4 -2
View File
@@ -25,6 +25,8 @@
#include "PerMessageDeflate.h" #include "PerMessageDeflate.h"
#include "f2/function2.hpp"
namespace uWS { namespace uWS {
struct Loop; struct Loop;
@@ -34,9 +36,9 @@ struct alignas(16) LoopData {
private: private:
std::mutex deferMutex; std::mutex deferMutex;
int currentDeferQueue = 0; int currentDeferQueue = 0;
std::vector<std::function<void()>> deferQueues[2]; std::vector<fu2::unique_function<void()>> deferQueues[2];
std::function<void(Loop *)> postHandler, preHandler; fu2::unique_function<void(Loop *)> postHandler, preHandler;
public: public:
~LoopData() { ~LoopData() {