diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 7827271aa9..47d629a8f1 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -68,6 +68,8 @@ DomainServer::DomainServer(int argc, char* argv[]) : LogUtils::init(); Setting::init(); + connect(this, &QCoreApplication::aboutToQuit, this, &DomainServer::aboutToQuit); + setOrganizationName("High Fidelity"); setOrganizationDomain("highfidelity.io"); setApplicationName("domain-server"); @@ -106,6 +108,11 @@ DomainServer::DomainServer(int argc, char* argv[]) : } } +void DomainServer::aboutToQuit() { + // clear the log handler so that Qt doesn't call the destructor on LogHandler + qInstallMessageHandler(0); +} + void DomainServer::restart() { qDebug() << "domain-server is restarting."; @@ -558,7 +565,6 @@ const NodeSet STATICALLY_ASSIGNED_NODES = NodeSet() << NodeType::AudioMixer << NodeType::AvatarMixer << NodeType::EntityServer; void DomainServer::handleConnectRequest(const QByteArray& packet, const HifiSockAddr& senderSockAddr) { - NodeType_t nodeType; HifiSockAddr publicSockAddr, localSockAddr; @@ -1341,10 +1347,14 @@ void DomainServer::pingPunchForConnectingPeer(const SharedNetworkPeer& peer) { } void DomainServer::handlePeerPingTimeout() { - SharedNetworkPeer senderPeer = _icePeers.value(qobject_cast(sender())->getUUID()); + NetworkPeer* senderPeer = qobject_cast(sender()); - if (senderPeer && !senderPeer->getActiveSocket()) { - pingPunchForConnectingPeer(senderPeer); + if (senderPeer) { + SharedNetworkPeer sharedPeer = _icePeers.value(senderPeer->getUUID()); + + if (sharedPeer && !sharedPeer->getActiveSocket()) { + pingPunchForConnectingPeer(sharedPeer); + } } } diff --git a/domain-server/src/DomainServer.h b/domain-server/src/DomainServer.h index 7a9fb2fe9b..74dbde8b4b 100644 --- a/domain-server/src/DomainServer.h +++ b/domain-server/src/DomainServer.h @@ -57,6 +57,8 @@ public slots: void restart(); private slots: + void aboutToQuit(); + void loginFailed(); void readAvailableDatagrams(); void setupPendingAssignmentCredits(); diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 326573ef35..24a9225374 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -646,10 +646,13 @@ void NodeList::startNodeHolePunch(const SharedNodePointer& node) { } void NodeList::handleNodePingTimeout() { - SharedNodePointer senderNode = nodeWithUUID(qobject_cast(sender())->getUUID()); + Node* senderNode = qobject_cast(sender()); + if (senderNode) { + SharedNodePointer sharedNode = nodeWithUUID(senderNode->getUUID()); - if (senderNode && !senderNode->getActiveSocket()) { - pingPunchForInactiveNode(senderNode); + if (sharedNode && !sharedNode->getActiveSocket()) { + pingPunchForInactiveNode(sharedNode); + } } }