Make Loop and LoopData only hold move-only functions
This commit is contained in:
+6
-6
@@ -110,25 +110,25 @@ public:
|
||||
}
|
||||
|
||||
/* 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->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->preHandler = handler;
|
||||
loopData->preHandler = std::move(handler);
|
||||
}
|
||||
|
||||
/* 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);
|
||||
|
||||
//if (std::thread::get_id() == ) // todo: add fast path for same thread id
|
||||
loopData->deferMutex.lock();
|
||||
loopData->deferQueues[loopData->currentDeferQueue].emplace_back(cb);
|
||||
loopData->deferQueues[loopData->currentDeferQueue].emplace_back(std::move(cb));
|
||||
loopData->deferMutex.unlock();
|
||||
|
||||
us_wakeup_loop((us_loop *) this);
|
||||
|
||||
+4
-2
@@ -25,6 +25,8 @@
|
||||
|
||||
#include "PerMessageDeflate.h"
|
||||
|
||||
#include "f2/function2.hpp"
|
||||
|
||||
namespace uWS {
|
||||
|
||||
struct Loop;
|
||||
@@ -34,9 +36,9 @@ struct alignas(16) LoopData {
|
||||
private:
|
||||
std::mutex deferMutex;
|
||||
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:
|
||||
~LoopData() {
|
||||
|
||||
Reference in New Issue
Block a user