From acfc28bc8972e77a3832a5dc333a056d2df5f08b Mon Sep 17 00:00:00 2001 From: Reinder Feenstra Date: Mon, 29 Apr 2024 23:34:25 +0200 Subject: [PATCH] dccex: fix: crash caused by failing tcp connect caused by unhandled exception see #120 --- server/src/hardware/interface/dccexinterface.cpp | 5 ++++- server/src/hardware/protocol/dccex/kernel.cpp | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/server/src/hardware/interface/dccexinterface.cpp b/server/src/hardware/interface/dccexinterface.cpp index 18d4b44d..2b9b9535 100644 --- a/server/src/hardware/interface/dccexinterface.cpp +++ b/server/src/hardware/interface/dccexinterface.cpp @@ -282,7 +282,10 @@ bool DCCEXInterface::setOnline(bool& value, bool simulation) m_kernel->stop(); m_kernel.reset(); - setState(InterfaceState::Offline); + if(status->state != InterfaceState::Error) + { + setState(InterfaceState::Offline); + } } return true; } diff --git a/server/src/hardware/protocol/dccex/kernel.cpp b/server/src/hardware/protocol/dccex/kernel.cpp index 99a66bb1..4c04e24e 100644 --- a/server/src/hardware/protocol/dccex/kernel.cpp +++ b/server/src/hardware/protocol/dccex/kernel.cpp @@ -32,6 +32,7 @@ #include "../../../utils/rtrim.hpp" #include "../../../core/eventloop.hpp" #include "../../../log/log.hpp" +#include "../../../log/logmessageexception.hpp" #include "../../../utils/inrange.hpp" #include "../../../utils/fromchars.hpp" #include "../../../utils/displayname.hpp" @@ -82,7 +83,20 @@ void Kernel::start() m_ioContext.post( [this]() { - m_ioHandler->start(); + try + { + m_ioHandler->start(); + } + catch(const LogMessageException& e) + { + EventLoop::call( + [this, e]() + { + Log::log(logId, e.message(), e.args()); + error(); + }); + return; + } m_startupDelayTimer.expires_after(boost::asio::chrono::milliseconds(m_config.startupDelay)); m_startupDelayTimer.async_wait(std::bind(&Kernel::startupDelayExpired, this, std::placeholders::_1));