From 821e0b10b62ea22bd7b81a7b94b1464eaa2ef193 Mon Sep 17 00:00:00 2001 From: Roland Rossgotterer Date: Wed, 3 Apr 2019 08:59:54 +0200 Subject: [PATCH] Fix assert in DBus if dbus_server_listen returned NULL ref T589 --- src/xswiftbus/dbusserver.cpp | 11 +++++++++-- src/xswiftbus/plugin.cpp | 8 +++++++- src/xswiftbus/service.cpp | 1 - src/xswiftbus/utils.cpp | 4 ++-- src/xswiftbus/utils.h | 3 ++- 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/xswiftbus/dbusserver.cpp b/src/xswiftbus/dbusserver.cpp index e35193578..7db38828a 100644 --- a/src/xswiftbus/dbusserver.cpp +++ b/src/xswiftbus/dbusserver.cpp @@ -34,23 +34,30 @@ namespace XSwiftBus DBusError error; dbus_error_init(&error); m_server.reset(dbus_server_listen(address.c_str(), &error)); + + if (! m_server) + { + ERROR_LOG("DBus failed to listen for new connections on given address: " + std::string(error.message)); + return false; + } dbus_server_set_new_connection_function(m_server.get(), onNewConnection, this, nullptr); return true; } bool CDBusServer::isConnected() const { - return dbus_server_get_is_connected(m_server.get()); + return m_server ? dbus_server_get_is_connected(m_server.get()) : false; } void CDBusServer::close() { - dbus_server_disconnect(m_server.get()); + if (m_server) { dbus_server_disconnect(m_server.get()); } } void CDBusServer::setDispatcher(CDBusDispatcher *dispatcher) { assert(dispatcher); + assert(m_server); m_dispatcher = dispatcher; diff --git a/src/xswiftbus/plugin.cpp b/src/xswiftbus/plugin.cpp index bd340eec3..9dc935607 100644 --- a/src/xswiftbus/plugin.cpp +++ b/src/xswiftbus/plugin.cpp @@ -103,7 +103,11 @@ namespace XSwiftBus // FIXME: make listen address configurable std::string listenAddress = "tcp:host=" + m_pluginConfig.getDBusAddress() + ",port=" + std::to_string(m_pluginConfig.getDBusPort()); - m_dbusP2PServer->listen(listenAddress); + if (! m_dbusP2PServer->listen(listenAddress)) + { + m_service->addTextMessage("XSwiftBus startup failed!", 255, 0, 0); + return; + } m_dbusP2PServer->setDispatcher(&m_dbusDispatcher); m_dbusP2PServer->setNewConnectionFunc([this](const std::shared_ptr &conn) @@ -140,7 +144,9 @@ namespace XSwiftBus m_weather->registerDBusObjectPath(m_weather->InterfaceName(), m_weather->ObjectPath()); } + //! todo RR: Send all logs to the the message window. INFO_LOG("XSwiftBus started."); + m_service->addTextMessage("XSwiftBus started.", 0, 255, 255); } void CPlugin::onAircraftModelChanged() diff --git a/src/xswiftbus/service.cpp b/src/xswiftbus/service.cpp index 78578fc50..dec73859a 100644 --- a/src/xswiftbus/service.cpp +++ b/src/xswiftbus/service.cpp @@ -22,7 +22,6 @@ namespace XSwiftBus CService::CService() : CDBusObject() { - addTextMessage("xswiftbus started.", 0, 255, 255); updateAirportsInRange(); } diff --git a/src/xswiftbus/utils.cpp b/src/xswiftbus/utils.cpp index 202531bf4..a3c74e4f5 100644 --- a/src/xswiftbus/utils.cpp +++ b/src/xswiftbus/utils.cpp @@ -67,8 +67,8 @@ namespace XSwiftBus case WarningMsg: ss << "Warning"; break; - case FatalMsg: - ss << "Fatal"; + case ErrorMsg: + ss << "Error"; break; } ss << ' '; diff --git a/src/xswiftbus/utils.h b/src/xswiftbus/utils.h index d72302b5c..674fda55e 100644 --- a/src/xswiftbus/utils.h +++ b/src/xswiftbus/utils.h @@ -31,7 +31,7 @@ namespace XSwiftBus { public: //! Message type - enum MsgType { DebugMsg, WarningMsg, FatalMsg, InfoMsg }; + enum MsgType { DebugMsg, WarningMsg, ErrorMsg, InfoMsg }; Logger() = delete; @@ -44,6 +44,7 @@ namespace XSwiftBus #define DEBUG_LOG(msg) Logger::print(__FILE__, __LINE__, Logger::DebugMsg, msg) #define INFO_LOG(msg) Logger::print(__FILE__, __LINE__, Logger::InfoMsg, msg) #define WARNING_LOG(msg) Logger::print(__FILE__, __LINE__, Logger::WarningMsg, msg) + #define ERROR_LOG(msg) Logger::print(__FILE__, __LINE__, Logger::ErrorMsg, msg) //! @} }