From f08d98792cc8852b8e909e3535307167d6ace6cc Mon Sep 17 00:00:00 2001 From: Simon Ninon Date: Sun, 15 Nov 2015 18:35:37 +0100 Subject: [PATCH] issue #1 use a boost::asio::io_service::work object to keep the io_service::run loop alive --- examples/redis_client.cpp | 2 +- includes/cpp_redis/network/io_service.hpp | 3 ++- sources/network/io_service.cpp | 7 ++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/examples/redis_client.cpp b/examples/redis_client.cpp index eaf997ca..2f5ffdad 100644 --- a/examples/redis_client.cpp +++ b/examples/redis_client.cpp @@ -3,7 +3,7 @@ #include #include -bool should_exit = false; +volatile std::atomic_bool should_exit(false); cpp_redis::redis_client client; void diff --git a/includes/cpp_redis/network/io_service.hpp b/includes/cpp_redis/network/io_service.hpp index 07a727cc..f20a4bc4 100644 --- a/includes/cpp_redis/network/io_service.hpp +++ b/includes/cpp_redis/network/io_service.hpp @@ -11,7 +11,7 @@ namespace network { class io_service { public: //! ctor & dtor - io_service(void) = default; + io_service(void); ~io_service(void); //! copy ctor & assignment operator @@ -28,6 +28,7 @@ class io_service { private: boost::asio::io_service m_io_service; + boost::asio::io_service::work m_work; std::thread m_io_service_thread; }; diff --git a/sources/network/io_service.cpp b/sources/network/io_service.cpp index 6f7b01d5..421b4726 100644 --- a/sources/network/io_service.cpp +++ b/sources/network/io_service.cpp @@ -4,9 +4,14 @@ namespace cpp_redis { namespace network { +io_service::io_service(void) +: m_work(m_io_service) {} + io_service::~io_service(void) { - if (m_io_service_thread.joinable()) + if (m_io_service_thread.joinable()) { + m_io_service.stop(); m_io_service_thread.join(); + } } void