From df1286ac886fb0865e3b9785950ed60f71f6f8bd Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Thu, 4 May 2023 21:08:14 -0500 Subject: [PATCH] Fix crash if the app terminates before the control stream is connected --- src/stream.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/stream.cpp b/src/stream.cpp index 173f8ff6..ec4cb0cc 100644 --- a/src/stream.cpp +++ b/src/stream.cpp @@ -897,11 +897,14 @@ namespace stream { for (auto pos = std::begin(*server->_map_addr_session); pos != std::end(*server->_map_addr_session); ++pos) { auto session = pos->second.second; - auto payload = encode_control(session, util::view(plaintext), encrypted_payload); + // We may not have gotten far enough to have an ENet connection yet + if (session->control.peer) { + auto payload = encode_control(session, util::view(plaintext), encrypted_payload); - if (server->send(payload, session->control.peer)) { - TUPLE_2D(port, addr, platf::from_sockaddr_ex((sockaddr *) &session->control.peer->address.address)); - BOOST_LOG(warning) << "Couldn't send termination code to ["sv << addr << ':' << port << ']'; + if (server->send(payload, session->control.peer)) { + TUPLE_2D(port, addr, platf::from_sockaddr_ex((sockaddr *) &session->control.peer->address.address)); + BOOST_LOG(warning) << "Couldn't send termination code to ["sv << addr << ':' << port << ']'; + } } session->shutdown_event->raise(true);