diff --git a/libtransmission/session-thread.cc b/libtransmission/session-thread.cc index 42c198b07..2436eb661 100644 --- a/libtransmission/session-thread.cc +++ b/libtransmission/session-thread.cc @@ -200,7 +200,7 @@ public: return thread_id_ == std::this_thread::get_id(); } - void queue(std::function&& func) override + void queue(callback_t&& func) override { work_queue_mutex_.lock(); work_queue_.emplace_back(std::move(func)); @@ -209,7 +209,7 @@ public: event_active(work_queue_event_.get(), 0, {}); } - void run(std::function&& func) override + void run(callback_t&& func) override { if (am_in_session_thread()) { @@ -222,8 +222,7 @@ public: } private: - using callback = std::function; - using work_queue_t = std::list; + using work_queue_t = std::list; void session_thread_func(struct event_base* evbase) { diff --git a/libtransmission/session-thread.h b/libtransmission/session-thread.h index dbe86c000..9eadbd5c1 100644 --- a/libtransmission/session-thread.h +++ b/libtransmission/session-thread.h @@ -17,6 +17,9 @@ struct event_base; class tr_session_thread { +protected: + using callback_t = std::function; + public: static void tr_evthread_init(); @@ -27,28 +30,19 @@ public: [[nodiscard]] virtual bool am_in_session_thread() const noexcept = 0; - virtual void queue(std::function&& func) = 0; + virtual void queue(callback_t&& func) = 0; - virtual void run(std::function&& func) = 0; + virtual void run(callback_t&& func) = 0; template void queue(Func&& func, Args&&... args) { - // TODO(tearfur): Use C++20 P0780R2, GCC 9, clang 9 - queue( - std::function{ - [func = std::forward(func), args = std::make_tuple(std::forward(args)...)]() - { std::apply(std::move(func), std::move(args)); }, - }); + queue(callback_t{ std::bind_front(std::forward(func), std::forward(args)...) }); } template void run(Func&& func, Args&&... args) { - // TODO(tearfur): Use C++20 P0780R2, GCC 9, clang 9 - run(std::function{ - [func = std::forward(func), args = std::make_tuple(std::forward(args)...)]() - { std::apply(std::move(func), std::move(args)); }, - }); + run(callback_t{ std::bind_front(std::forward(func), std::forward(args)...) }); } };