From 1bdc50ab4172c229e130120e9e075e5c3319f9f0 Mon Sep 17 00:00:00 2001 From: Dennis Scheiba Date: Thu, 19 Dec 2024 15:58:01 +0100 Subject: [PATCH 1/5] replace deprecated `boost::asio::io_service` with `boost::asio::io_context` (#6572) --- QtCollider/LanguageClient.cpp | 2 +- lang/LangPrimSource/OSCData.cpp | 2 +- lang/LangPrimSource/PyrSerialPrim.cpp | 4 ++-- lang/LangPrimSource/SC_ComPort.cpp | 20 +++++++++---------- lang/LangPrimSource/SC_ComPort.h | 2 +- lang/LangSource/SC_TerminalClient.cpp | 24 +++++++++++------------ lang/LangSource/SC_TerminalClient.h | 8 ++++---- server/scsynth/SC_ComPort.cpp | 18 ++++++++--------- server/supernova/sc/sc_osc_handler.hpp | 6 +++--- server/supernova/utilities/osc_server.hpp | 13 ++++++------ 10 files changed, 49 insertions(+), 50 deletions(-) diff --git a/QtCollider/LanguageClient.cpp b/QtCollider/LanguageClient.cpp index 00576ebd04a..83c73a5bf83 100644 --- a/QtCollider/LanguageClient.cpp +++ b/QtCollider/LanguageClient.cpp @@ -70,7 +70,7 @@ void LangClient::customEvent(QEvent* e) { case Event_SCRequest_Work: QApplication::removePostedEvents(this, Event_SCRequest_Work); - mIoService.poll(); + mIoContext.poll(); break; case Event_SCRequest_Quit: { int code = static_cast(e)->data.toInt(); diff --git a/lang/LangPrimSource/OSCData.cpp b/lang/LangPrimSource/OSCData.cpp index 0c0d7f9f7ff..bbb3caa8006 100644 --- a/lang/LangPrimSource/OSCData.cpp +++ b/lang/LangPrimSource/OSCData.cpp @@ -934,7 +934,7 @@ void cleanup_OSC() { #endif } -extern boost::asio::io_service ioService; +extern boost::asio::io_context ioContext; static int prGetHostByName(VMGlobals* g, int numArgsPushed) { PyrSlot* a = g->sp; diff --git a/lang/LangPrimSource/PyrSerialPrim.cpp b/lang/LangPrimSource/PyrSerialPrim.cpp index cc56abdcead..bcfbeda5551 100644 --- a/lang/LangPrimSource/PyrSerialPrim.cpp +++ b/lang/LangPrimSource/PyrSerialPrim.cpp @@ -49,7 +49,7 @@ using boost::uint8_t; using boost::asio::serial_port; -extern boost::asio::io_service ioService; // defined in SC_ComPort.cpp +extern boost::asio::io_context ioContext; // defined in SC_ComPort.cpp /** * \brief Serial port abstraction @@ -104,7 +104,7 @@ class SerialPort { */ SerialPort(PyrObject* obj, const char* serialport, const Options& options): m_obj(obj), - m_port(ioService, serialport), + m_port(ioContext, serialport), m_options(options), m_rxErrors(0) { using namespace boost::asio; diff --git a/lang/LangPrimSource/SC_ComPort.cpp b/lang/LangPrimSource/SC_ComPort.cpp index 78f01b389d9..aa48e078311 100644 --- a/lang/LangPrimSource/SC_ComPort.cpp +++ b/lang/LangPrimSource/SC_ComPort.cpp @@ -46,12 +46,12 @@ void ProcessRawMessage(std::unique_ptr inData, size_t inSize, ReplyAddre ////////////////////////////////////////////////////////////////////////////////////////////////////////// SC_Thread gAsioThread; -boost::asio::io_service ioService; +boost::asio::io_context ioContext; static void asioFunction() { - boost::asio::io_service::work work(ioService); - ioService.run(); + boost::asio::io_context::work work(ioContext); + ioContext.run(); } void startAsioThread() { @@ -60,7 +60,7 @@ void startAsioThread() { } void stopAsioThread() { - ioService.stop(); + ioContext.stop(); gAsioThread.join(); } @@ -66,7 +66,7 @@ ////////////////////////////////////////////////////////////////////////////////////////////////////////// -SC_UdpInPort::SC_UdpInPort(int inPortNum, int portsToCheck): mPortNum(inPortNum), udpSocket(ioService) { +SC_UdpInPort::SC_UdpInPort(int inPortNum, int portsToCheck): mPortNum(inPortNum), udpSocket(ioContext) { using namespace boost::asio; BOOST_AUTO(protocol, ip::udp::v4()); @@ -142,7 +142,7 @@ ////////////////////////////////////////////////////////////////////////////////////////////////////////// SC_TcpInPort::SC_TcpInPort(int inPortNum, int inMaxConnections, int inBacklog): - acceptor(ioService, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), inPortNum)), + acceptor(ioContext, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), inPortNum)), mPortNum(inPortNum) { // FIXME: handle max connections // FIXME: backlog??? @@ -151,7 +151,7 @@ } void SC_TcpInPort::startAccept() { - SC_TcpConnection::pointer newConnection(new SC_TcpConnection(ioService, this)); + SC_TcpConnection::pointer newConnection(new SC_TcpConnection(ioContext, this)); acceptor.async_accept( newConnection->socket, @@ -210,7 +210,7 @@ ////////////////////////////////////////////////////////////////////////////////////////////////////////// SC_TcpClientPort::SC_TcpClientPort(unsigned long inAddress, int inPort, ClientNotifyFunc notifyFunc, void* clientData): - socket(ioService), + socket(ioContext), endpoint(boost::asio::ip::address_v4(inAddress), inPort), mClientNotifyFunc(notifyFunc), mClientData(clientData) { diff --git a/lang/LangPrimSource/SC_ComPort.h b/lang/LangPrimSource/SC_ComPort.h index 0e192e91914..99d23b3b27b 100644 --- a/lang/LangPrimSource/SC_ComPort.h +++ b/lang/LangPrimSource/SC_ComPort.h @@ -63,8 +63,8 @@ typedef boost::shared_ptr pointer; boost::asio::ip::tcp::socket socket; - SC_TcpConnection(boost::asio::io_service& ioService, class SC_TcpInPort* parent): - socket(ioService), + SC_TcpConnection(boost::asio::io_context& ioContext, class SC_TcpInPort* parent): + socket(ioContext), mParent(parent) {} void start(); diff --git a/lang/LangSource/SC_TerminalClient.cpp b/lang/LangSource/SC_TerminalClient.cpp index 13f11a11176..3a091514ab5 100644 --- a/lang/LangSource/SC_TerminalClient.cpp +++ b/lang/LangSource/SC_TerminalClient.cpp @@ -75,12 +75,12 @@ SC_TerminalClient::SC_TerminalClient(const char* name): SC_LanguageClient(name), mReturnCode(0), mUseReadline(false), - mWork(mIoService), - mTimer(mIoService), + mWork(mIoContext), + mTimer(mIoContext), #ifndef _WIN32 - mStdIn(mInputService, STDIN_FILENO) + mStdIn(mInputContext, STDIN_FILENO) #else - mStdIn(mInputService, GetStdHandle(STD_INPUT_HANDLE)) + mStdIn(mInputContext, GetStdHandle(STD_INPUT_HANDLE)) #endif { } @@ -360,19 +360,19 @@ void SC_TerminalClient::onLibraryStartup() { void SC_TerminalClient::sendSignal(Signal sig) { switch (sig) { case sig_input: - mIoService.post(boost::bind(&SC_TerminalClient::interpretInput, this)); + mIoContext.post(boost::bind(&SC_TerminalClient::interpretInput, this)); break; case sig_recompile: - mIoService.post(boost::bind(&SC_TerminalClient::recompileLibrary, this)); + mIoContext.post(boost::bind(&SC_TerminalClient::recompileLibrary, this)); break; case sig_sched: - mIoService.post(boost::bind(&SC_TerminalClient::tick, this, boost::system::error_code())); + mIoContext.post(boost::bind(&SC_TerminalClient::tick, this, boost::system::error_code())); break; case sig_stop: - mIoService.post(boost::bind(&SC_TerminalClient::stopMain, this)); + mIoContext.post(boost::bind(&SC_TerminalClient::stopMain, this)); break; } } @@ -447,7 +447,7 @@ void SC_TerminalClient::tick(const boost::system::error_code& error) { } } -void SC_TerminalClient::commandLoop() { mIoService.run(); } +void SC_TerminalClient::commandLoop() { mIoContext.run(); } void SC_TerminalClient::daemonLoop() { commandLoop(); } @@ -614,8 +614,8 @@ void SC_TerminalClient::inputThreadFn() { startInputRead(); - boost::asio::io_service::work work(mInputService); - mInputService.run(); + boost::asio::io_context::work work(mInputContext); + mInputContext.run(); } @@ -662,7 +662,7 @@ void SC_TerminalClient::startInput() { } void SC_TerminalClient::endInput() { - mInputService.stop(); + mInputContext.stop(); mStdIn.cancel(); #ifdef _WIN32 // Note this breaks Windows XP compatibility, since this function is only defined in Vista and later diff --git a/lang/LangSource/SC_TerminalClient.h b/lang/LangSource/SC_TerminalClient.h index 373e82bb830..0ea3cdc35b3 100644 --- a/lang/LangSource/SC_TerminalClient.h +++ b/lang/LangSource/SC_TerminalClient.h @@ -91,7 +91,7 @@ class SCLANG_DLLEXPORT SC_TerminalClient : public SC_LanguageClient { // NOTE: It may be called from any thread, and with interpreter locked. virtual void sendSignal(Signal code); - void stop() { mIoService.stop(); } + void stop() { mIoContext.stop(); } protected: bool parseOptions(int& argc, char**& argv, Options& opt); @@ -151,14 +151,14 @@ class SCLANG_DLLEXPORT SC_TerminalClient : public SC_LanguageClient { // app-clock io service protected: - boost::asio::io_service mIoService; + boost::asio::io_context mIoContext; private: - boost::asio::io_service::work mWork; + boost::asio::io_context::work mWork; boost::asio::basic_waitable_timer mTimer; // input io service - boost::asio::io_service mInputService; + boost::asio::io_context mInputContext; SC_Thread mInputThread; void inputThreadFn(); diff --git a/server/scsynth/SC_ComPort.cpp b/server/scsynth/SC_ComPort.cpp index 5541f509bbd..a8ebbfe71c6 100644 --- a/server/scsynth/SC_ComPort.cpp +++ b/server/scsynth/SC_ComPort.cpp @@ -145,7 +145,7 @@ static bool UnrollOSCPacket(World* inWorld, int inSize, char* inData, OSC_Packet ///////////////////////////////////////////////////////////////////////////////////////////////////////// SC_Thread gAsioThread; -boost::asio::io_service ioService; +boost::asio::io_context ioContext; const int kTextBufSize = 65536; @@ -252,7 +252,7 @@ class SC_UdpInPort { mWorld(world), mPortNum(inPortNum), mbindTo(bindTo), - udpSocket(ioService) { + udpSocket(ioContext) { using namespace boost::asio; BOOST_AUTO(protocol, ip::udp::v4()); udpSocket.open(protocol); @@ -282,9 +282,9 @@ class SC_TcpConnection : public boost::enable_shared_from_this typedef boost::shared_ptr pointer; boost::asio::ip::tcp::socket socket; - SC_TcpConnection(struct World* world, boost::asio::io_service& ioService, class SC_TcpInPort* parent): + SC_TcpConnection(struct World* world, boost::asio::io_context& ioContext, class SC_TcpInPort* parent): mWorld(world), - socket(ioService), + socket(ioContext), mParent(parent) {} ~SC_TcpConnection(); @@ -400,7 +400,7 @@ class SC_TcpInPort { public: SC_TcpInPort(struct World* world, const std::string& bindTo, int inPortNum, int inMaxConnections, int inBacklog): mWorld(world), - acceptor(ioService, boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(bindTo), inPortNum)), + acceptor(ioContext, boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(bindTo), inPortNum)), mAvailableConnections(inMaxConnections) { // FIXME: backlog??? @@ -419,7 +419,7 @@ class SC_TcpInPort { void startAccept() { if (mAvailableConnections > 0) { --mAvailableConnections; - SC_TcpConnection::pointer newConnection(new SC_TcpConnection(mWorld, ioService, this)); + SC_TcpConnection::pointer newConnection(new SC_TcpConnection(mWorld, ioContext, this)); acceptor.async_accept( newConnection->socket, @@ -453,8 +453,8 @@ static void asioFunction() { nova::thread_set_priority_rt(priority); #endif - boost::asio::io_service::work work(ioService); - ioService.run(); + boost::asio::io_context::work work(ioContext); + ioContext.run(); } void startAsioThread() { @@ -463,7 +463,7 @@ void startAsioThread() { } void stopAsioThread() { - ioService.stop(); + ioContext.stop(); gAsioThread.join(); } diff --git a/server/supernova/sc/sc_osc_handler.hpp b/server/supernova/sc/sc_osc_handler.hpp index ae75c9dc05a..ce342c419e1 100644 --- a/server/supernova/sc/sc_osc_handler.hpp +++ b/server/supernova/sc/sc_osc_handler.hpp @@ -95,7 +95,7 @@ class sc_notify_observers { public: typedef enum { no_error = 0, already_registered = -1, not_registered = -2 } error_code; - sc_notify_observers(boost::asio::io_service& io_service): udp_socket(io_service) {} + sc_notify_observers(boost::asio::io_context& io_context): udp_socket(io_context) {} int add_observer(endpoint_ptr const& ep); int remove_observer(endpoint_ptr const& ep); @@ -186,8 +186,8 @@ class sc_osc_handler : private detail::network_thread, public sc_notify_observer public: sc_osc_handler(server_arguments const& args): - sc_notify_observers(detail::network_thread::io_service_), - tcp_acceptor_(detail::network_thread::io_service_), + sc_notify_observers(detail::network_thread::io_context_), + tcp_acceptor_(detail::network_thread::io_context_), tcp_password_(args.server_password.size() ? args.server_password.c_str() : nullptr) { if (!args.non_rt) { if (args.tcp_port && !open_socket(IPPROTO_TCP, args.socket_address, args.tcp_port)) diff --git a/server/supernova/utilities/osc_server.hpp b/server/supernova/utilities/osc_server.hpp index 1746fa172b3..d209fed8983 100644 --- a/server/supernova/utilities/osc_server.hpp +++ b/server/supernova/utilities/osc_server.hpp @@ -30,7 +30,6 @@ # define BOOST_ASIO_HAS_STD_STRING_VIEW 1 #endif -#include #include #include "branch_hints.hpp" @@ -56,8 +55,8 @@ class network_thread { name_thread("Network Receive"); sem.post(); - io_service::work work(io_service_); - io_service_.run(); + io_context::work work(io_context_); + io_context_.run(); }); sem.wait(); } @@ -65,20 +64,20 @@ class network_thread { ~network_thread(void) { if (!thread_.joinable()) return; - io_service_.stop(); + io_context_.stop(); thread_.join(); } - io_service& get_io_service(void) { return io_service_; } + io_context& get_io_context(void) { return io_context_; } void send_udp(const char* data, unsigned int size, udp::endpoint const& receiver) { - udp::socket socket(io_service_); + udp::socket socket(io_context_); socket.open(udp::v4()); socket.send_to(boost::asio::buffer(data, size), receiver); } protected: - io_service io_service_; + io_context io_context_; private: semaphore sem; From 8015d8ebf26c1f95a0a646775f1e75397966b294 Mon Sep 17 00:00:00 2001 From: Dennis Scheiba Date: Thu, 19 Dec 2024 16:41:44 +0100 Subject: [PATCH 2/5] replace deprecated `boost::asio::io_context::work` with `boost::asio::make_work_guard` --- lang/LangPrimSource/SC_ComPort.cpp | 3 ++- lang/LangSource/SC_TerminalClient.cpp | 5 +++-- lang/LangSource/SC_TerminalClient.h | 2 +- server/scsynth/SC_ComPort.cpp | 3 ++- server/supernova/utilities/osc_server.hpp | 3 ++- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lang/LangPrimSource/SC_ComPort.cpp b/lang/LangPrimSource/SC_ComPort.cpp index aa48e078311..57b0fc5e89f 100644 --- a/lang/LangPrimSource/SC_ComPort.cpp +++ b/lang/LangPrimSource/SC_ComPort.cpp @@ -50,7 +50,8 @@ boost::asio::io_context ioContext; static void asioFunction() { - boost::asio::io_context::work work(ioContext); + boost::asio::executor_work_guard work = + boost::asio::make_work_guard(ioContext); ioContext.run(); } diff --git a/lang/LangSource/SC_TerminalClient.cpp b/lang/LangSource/SC_TerminalClient.cpp index 3a091514ab5..2c2a1a2eaac 100644 --- a/lang/LangSource/SC_TerminalClient.cpp +++ b/lang/LangSource/SC_TerminalClient.cpp @@ -75,7 +75,7 @@ SC_TerminalClient::SC_TerminalClient(const char* name): SC_LanguageClient(name), mReturnCode(0), mUseReadline(false), - mWork(mIoContext), + mWork(boost::asio::make_work_guard(mIoContext)), mTimer(mIoContext), #ifndef _WIN32 mStdIn(mInputContext, STDIN_FILENO) @@ -614,7 +614,8 @@ void SC_TerminalClient::inputThreadFn() { startInputRead(); - boost::asio::io_context::work work(mInputContext); + boost::asio::executor_work_guard work = + boost::asio::make_work_guard(mInputContext); mInputContext.run(); } diff --git a/lang/LangSource/SC_TerminalClient.h b/lang/LangSource/SC_TerminalClient.h index 0ea3cdc35b3..b4cf0e96482 100644 --- a/lang/LangSource/SC_TerminalClient.h +++ b/lang/LangSource/SC_TerminalClient.h @@ -154,7 +154,7 @@ class SCLANG_DLLEXPORT SC_TerminalClient : public SC_LanguageClient { boost::asio::io_context mIoContext; private: - boost::asio::io_context::work mWork; + boost::asio::executor_work_guard mWork; boost::asio::basic_waitable_timer mTimer; // input io service diff --git a/server/scsynth/SC_ComPort.cpp b/server/scsynth/SC_ComPort.cpp index a8ebbfe71c6..1e6f6d0784e 100644 --- a/server/scsynth/SC_ComPort.cpp +++ b/server/scsynth/SC_ComPort.cpp @@ -453,7 +453,8 @@ static void asioFunction() { nova::thread_set_priority_rt(priority); #endif - boost::asio::io_context::work work(ioContext); + boost::asio::executor_work_guard work = + boost::asio::make_work_guard(ioContext); ioContext.run(); } diff --git a/server/supernova/utilities/osc_server.hpp b/server/supernova/utilities/osc_server.hpp index d209fed8983..cbecfc23d7c 100644 --- a/server/supernova/utilities/osc_server.hpp +++ b/server/supernova/utilities/osc_server.hpp @@ -55,7 +55,8 @@ class network_thread { name_thread("Network Receive"); sem.post(); - io_context::work work(io_context_); + boost::asio::executor_work_guard work = + boost::asio::make_work_guard(io_context_); io_context_.run(); }); sem.wait(); From ec58a79c2f6bc474d6835d6228ccb7e397465fe5 Mon Sep 17 00:00:00 2001 From: Dennis Scheiba Date: Fri, 20 Dec 2024 00:00:20 +0100 Subject: [PATCH 3/5] replace deprecated `address::from_string` with `make_address` --- server/scsynth/SC_ComPort.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/scsynth/SC_ComPort.cpp b/server/scsynth/SC_ComPort.cpp index 1e6f6d0784e..272eeebfbc2 100644 --- a/server/scsynth/SC_ComPort.cpp +++ b/server/scsynth/SC_ComPort.cpp @@ -257,7 +257,7 @@ class SC_UdpInPort { BOOST_AUTO(protocol, ip::udp::v4()); udpSocket.open(protocol); - udpSocket.bind(ip::udp::endpoint(boost::asio::ip::address::from_string(bindTo), inPortNum)); + udpSocket.bind(ip::udp::endpoint(boost::asio::ip::make_address(bindTo), inPortNum)); boost::asio::socket_base::send_buffer_size option(65536); udpSocket.set_option(option); @@ -400,7 +400,7 @@ class SC_TcpInPort { public: SC_TcpInPort(struct World* world, const std::string& bindTo, int inPortNum, int inMaxConnections, int inBacklog): mWorld(world), - acceptor(ioContext, boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(bindTo), inPortNum)), + acceptor(ioContext, boost::asio::ip::tcp::endpoint(boost::asio::ip::make_address(bindTo), inPortNum)), mAvailableConnections(inMaxConnections) { // FIXME: backlog??? From 2cadfb7de577defb1664d7cc846d379721f13fa7 Mon Sep 17 00:00:00 2001 From: Dennis Scheiba Date: Fri, 20 Dec 2024 00:16:23 +0100 Subject: [PATCH 4/5] replace deprecated `io_context.post` with `boost::asio::post` --- lang/LangSource/SC_TerminalClient.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lang/LangSource/SC_TerminalClient.cpp b/lang/LangSource/SC_TerminalClient.cpp index 2c2a1a2eaac..551369304a9 100644 --- a/lang/LangSource/SC_TerminalClient.cpp +++ b/lang/LangSource/SC_TerminalClient.cpp @@ -360,19 +360,19 @@ void SC_TerminalClient::onLibraryStartup() { void SC_TerminalClient::sendSignal(Signal sig) { switch (sig) { case sig_input: - mIoContext.post(boost::bind(&SC_TerminalClient::interpretInput, this)); + boost::asio::post(boost::bind(&SC_TerminalClient::interpretInput, this)); break; case sig_recompile: - mIoContext.post(boost::bind(&SC_TerminalClient::recompileLibrary, this)); + boost::asio::post(boost::bind(&SC_TerminalClient::recompileLibrary, this)); break; case sig_sched: - mIoContext.post(boost::bind(&SC_TerminalClient::tick, this, boost::system::error_code())); + boost::asio::post(boost::bind(&SC_TerminalClient::tick, this, boost::system::error_code())); break; case sig_stop: - mIoContext.post(boost::bind(&SC_TerminalClient::stopMain, this)); + boost::asio::post(boost::bind(&SC_TerminalClient::stopMain, this)); break; } } From e085858742c1afcc9af9a3ecb6a98cc6f5a9269c Mon Sep 17 00:00:00 2001 From: Dennis Scheiba Date: Fri, 20 Dec 2024 00:27:36 +0100 Subject: [PATCH 5/5] replace deprecated `to_ulong` with `to_uint` --- lang/LangPrimSource/OSCData.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang/LangPrimSource/OSCData.cpp b/lang/LangPrimSource/OSCData.cpp index bbb3caa8006..65229f1c3a7 100644 --- a/lang/LangPrimSource/OSCData.cpp +++ b/lang/LangPrimSource/OSCData.cpp @@ -745,7 +745,7 @@ static PyrObject* ConvertReplyAddress(ReplyAddress* inReply) { VMGlobals* g = gMainVMGlobals; PyrObject* obj = instantiateObject(g->gc, s_netaddr->u.classobj, 2, true, false); PyrSlot* slots = obj->slots; - SetInt(slots + 0, inReply->mAddress.to_v4().to_ulong()); + SetInt(slots + 0, inReply->mAddress.to_v4().to_uint()); SetInt(slots + 1, inReply->mPort); return obj; }