From b3cdd91dc65a49d5e546f84107170fee7fbb8d74 Mon Sep 17 00:00:00 2001 From: Murray Stevenson <50844517+murraystevenson@users.noreply.github.com> Date: Fri, 2 Oct 2026 15:29:37 -0700 Subject: [PATCH 1/2] ClientDisplayDriver, DisplayDriverServer : Replace `boost::asio::io_service` with `io_context` `io_service` is an alias to `io_context` in Boost 1.85.0 and has been removed completely in Boost 1.88.0. I haven't renamed the variables themselves, but can do so if we think that tidier. --- src/IECoreImage/ClientDisplayDriver.cpp | 2 +- src/IECoreImage/DisplayDriverServer.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/IECoreImage/ClientDisplayDriver.cpp b/src/IECoreImage/ClientDisplayDriver.cpp index 68e96b50e4..f94d532cc4 100644 --- a/src/IECoreImage/ClientDisplayDriver.cpp +++ b/src/IECoreImage/ClientDisplayDriver.cpp @@ -72,7 +72,7 @@ class ClientDisplayDriver::PrivateData : public RefCounted m_socket.close(); } - boost::asio::io_service m_service; + boost::asio::io_context m_service; std::string m_host; std::string m_port; bool m_scanLineOrderOnly; diff --git a/src/IECoreImage/DisplayDriverServer.cpp b/src/IECoreImage/DisplayDriverServer.cpp index 406c37aa93..9625c9273d 100644 --- a/src/IECoreImage/DisplayDriverServer.cpp +++ b/src/IECoreImage/DisplayDriverServer.cpp @@ -106,7 +106,7 @@ class DisplayDriverServer::Session : public RefCounted { public: - Session( boost::asio::io_service& io_service, MergeMap& mergeMap ); + Session( boost::asio::io_context& io_service, MergeMap& mergeMap ); ~Session() override; boost::asio::ip::tcp::socket& socket(); @@ -135,7 +135,7 @@ class DisplayDriverServer::PrivateData : public RefCounted public : boost::asio::ip::tcp::endpoint m_endpoint; - boost::asio::io_service m_service; + boost::asio::io_context m_service; boost::asio::ip::tcp::acceptor m_acceptor; std::thread m_thread; MergeMap m_mergeMap; @@ -320,7 +320,7 @@ void DisplayDriverServer::handleAccept( DisplayDriverServer::SessionPtr session, * DisplayDriverServer::Session functions */ -DisplayDriverServer::Session::Session( boost::asio::io_service& io_service, MergeMap& mergeMap ) : +DisplayDriverServer::Session::Session( boost::asio::io_context& io_service, MergeMap& mergeMap ) : m_socket( io_service ), m_displayDriver(nullptr), m_buffer( new CharVectorData( ) ), m_mergeMap( mergeMap ) { } From 91c6e180bafff698cc51a31da685180b430fe074 Mon Sep 17 00:00:00 2001 From: Murray Stevenson <50844517+murraystevenson@users.noreply.github.com> Date: Fri, 2 Oct 2026 15:31:01 -0700 Subject: [PATCH 2/2] ClientDisplayDriver : Remove use of `tcp::resolver::query/iterator` tcp::resolver::query and tcp::resolver::iterator are deprecated in Boost 1.85.0 and removed from Boost 1.88.0. Construction of the old `query()` https://github.com/boostorg/asio/blob/e65367991cb5fbdb8a7cf218ae38f69ca9a0a9f5/include/boost/asio/ip/basic_resolver_query.hpp#L149 would set the `tcp::resolver::address_configured` resolve flag https://github.com/boostorg/asio/blob/8ce699c7d8c10a7d3e6187bc98244d1d2f2958c8/include/boost/asio/ip/resolver_base.hpp#L58-L61, so I've preserved that flag with the new call to `resolver.resolve()` --- Changes | 3 +++ src/IECoreImage/ClientDisplayDriver.cpp | 12 ++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Changes b/Changes index b5531e20db..4a8ee2d12c 100644 --- a/Changes +++ b/Changes @@ -1,7 +1,10 @@ 10.7.x.x (relative to 10.7.2.0) ======== +Build +----- +- Boost : Added compatibility with Boost 1.88.0. 10.7.2.0 (relative to 10.7.1.3) ======== diff --git a/src/IECoreImage/ClientDisplayDriver.cpp b/src/IECoreImage/ClientDisplayDriver.cpp index f94d532cc4..b76e4a79fa 100644 --- a/src/IECoreImage/ClientDisplayDriver.cpp +++ b/src/IECoreImage/ClientDisplayDriver.cpp @@ -96,17 +96,21 @@ ClientDisplayDriver::ClientDisplayDriver( const Imath::Box2i &displayWindow, con m_data->m_port = displayPortData->readable(); tcp::resolver resolver(m_data->m_service); - tcp::resolver::query query(m_data->m_host, m_data->m_port); boost::system::error_code error; - tcp::resolver::iterator iterator = resolver.resolve( query, error ); + auto endpoints = resolver.resolve( m_data->m_host, m_data->m_port, tcp::resolver::address_configured, error ); if( !error ) { error = boost::asio::error::host_not_found; - while( error && iterator != tcp::resolver::iterator() ) + for( const auto &e : endpoints ) { m_data->m_socket.close(); - m_data->m_socket.connect( *iterator++, error ); + m_data->m_socket.connect( e, error ); + + if( !error ) + { + break; + } } } if( error )