79 lines
2.8 KiB
Diff
79 lines
2.8 KiB
Diff
From e6a376836e5c891577eae6369263152106b9bc02 Mon Sep 17 00:00:00 2001
|
|
From: Christian Heusel <christian@heusel.eu>
|
|
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 <christian@heusel.eu>
|
|
---
|
|
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<boost::asio::io_service::work> workPtr;
|
|
+
|
|
+typedef boost::asio::io_context io_context_t;
|
|
+typedef boost::asio::executor_work_guard<io_context_t::executor_type> 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 <typename FUNC>
|
|
FuturePtr scheduleTask(FUNC func) {
|
|
FuturePtr future(newInstance<Future>());
|
|
- io_service.post(boost::bind(&ThreadPool::execute<FUNC>, this, func, future));
|
|
+ boost::asio::post(io_context, boost::bind(&ThreadPool::execute<FUNC>, 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
|
|
}
|
|
|