https://github.com/luceneplusplus/LucenePlusPlus/commit/e6a376836e5c891577eae6369263152106b9bc02 From e6a376836e5c891577eae6369263152106b9bc02 Mon Sep 17 00:00:00 2001 From: Christian Heusel Date: Tue, 21 Jan 2025 01:01:58 +0100 Subject: [PATCH] Migrate to boost::asio::io_context The code previously used the deprecated (and with bost 1.87.0 removed) `boost::asio::io_service`, which used to be an alias to `io_context`. The new version heavily changes the `io_context` API and therefore is no the old interface was removed. Fixes https://github.com/luceneplusplus/LucenePlusPlus/issues/208 Signed-off-by: Christian Heusel --- include/lucene++/ThreadPool.h | 10 ++++++---- src/core/util/ThreadPool.cpp | 9 +++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/include/lucene++/ThreadPool.h b/include/lucene++/ThreadPool.h index dc6446ff..175ac8ad 100644 --- a/include/lucene++/ThreadPool.h +++ b/include/lucene++/ThreadPool.h @@ -14,7 +14,9 @@ namespace Lucene { -typedef boost::shared_ptr workPtr; + +typedef boost::asio::io_context io_context_t; +typedef boost::asio::executor_work_guard work_t; /// A Future represents the result of an asynchronous computation. Methods are provided to check if the computation /// is complete, to wait for its completion, and to retrieve the result of the computation. The result can only be @@ -51,8 +53,8 @@ class ThreadPool : public LuceneObject { LUCENE_CLASS(ThreadPool); protected: - boost::asio::io_service io_service; - workPtr work; + io_context_t io_context; + work_t work; boost::thread_group threadGroup; static const int32_t THREADPOOL_SIZE; @@ -64,7 +66,7 @@ class ThreadPool : public LuceneObject { template FuturePtr scheduleTask(FUNC func) { FuturePtr future(newInstance()); - io_service.post(boost::bind(&ThreadPool::execute, this, func, future)); + boost::asio::post(io_context, boost::bind(&ThreadPool::execute, this, func, future)); return future; } diff --git a/src/core/util/ThreadPool.cpp b/src/core/util/ThreadPool.cpp index 8086d8b1..116f521c 100644 --- a/src/core/util/ThreadPool.cpp +++ b/src/core/util/ThreadPool.cpp @@ -14,15 +14,16 @@ Future::~Future() { const int32_t ThreadPool::THREADPOOL_SIZE = 5; -ThreadPool::ThreadPool() { - work.reset(new boost::asio::io_service::work(io_service)); +ThreadPool::ThreadPool() + : + work(boost::asio::make_work_guard(io_context)) +{ for (int32_t i = 0; i < THREADPOOL_SIZE; ++i) { - threadGroup.create_thread(boost::bind(&boost::asio::io_service::run, &io_service)); + threadGroup.create_thread(boost::bind(&boost::asio::io_context::run, &io_context)); } } ThreadPool::~ThreadPool() { - work.reset(); // stop all threads threadGroup.join_all(); // wait for all competition }