diff --git a/src/uvw/work.hpp b/src/uvw/work.hpp index 0b011f88..f1c5b242 100644 --- a/src/uvw/work.hpp +++ b/src/uvw/work.hpp @@ -17,24 +17,26 @@ struct WorkEvent: Event { }; class WorkReq final: public Request { + using InternalTask = std::function; + static void workCallback(uv_work_t *req) { static_cast(req->data)->task(); } - using Request::Request; + explicit WorkReq(std::shared_ptr ref, InternalTask t) + : Request{std::move(ref)}, task{t} + { } public: - using Task = std::function; + using Task = InternalTask; template static std::shared_ptr create(Args&&... args) { return std::shared_ptr{new WorkReq{std::forward(args)...}}; } - void queue(Task t) { - if(0 == invoke(&uv_queue_work, parent(), get(), &workCallback, &defaultCallback)) { - task = std::move(t); - } + void queue() { + invoke(&uv_queue_work, parent(), get(), &workCallback, &defaultCallback); } private: diff --git a/test/uvw/loop.cpp b/test/uvw/loop.cpp index f33462e6..1a6f3812 100644 --- a/test/uvw/loop.cpp +++ b/test/uvw/loop.cpp @@ -15,7 +15,7 @@ TEST(Loop, Basics) { auto loop = uvw::Loop::create(); auto handle = loop->resource(); - auto req = loop->resource(); + auto req = loop->resource([](){}); auto err = [](uvw::ErrorEvent, auto &) { ASSERT_TRUE(false); };