diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index d45c7217fa..da588bc316 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -194,9 +194,6 @@ void Agent::run() { void Agent::aboutToFinish() { _scriptEngine.stop(); - auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); - packetReceiver.unregisterListener(DependencyManager::get().data()); - // our entity tree is going to go away so tell that to the EntityScriptingInterface DependencyManager::get()->setEntityTree(NULL); } diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 7581e5192e..bd7f476fff 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -579,9 +579,9 @@ const NodeSet STATICALLY_ASSIGNED_NODES = NodeSet() << NodeType::AudioMixer void DomainServer::processConnectRequestPacket(QSharedPointer packet) { NodeType_t nodeType; HifiSockAddr publicSockAddr, localSockAddr; + if (packet->getPayloadSize() == 0) { - // TODO: We know what size the connect packet should be (minimally) - check for that here return; } @@ -593,6 +593,11 @@ void DomainServer::processConnectRequestPacket(QSharedPointer packet) const HifiSockAddr& senderSockAddr = packet->getSenderSockAddr(); parseNodeData(packetStream, nodeType, publicSockAddr, localSockAddr, senderSockAddr); + + if (localSockAddr.isNull() || senderSockAddr.isNull()) { + qDebug() << "Unexpected data received for node local socket or public socket. Will not allow connection."; + return; + } // check if this connect request matches an assignment in the queue bool isAssignment = _pendingAssignedNodes.contains(connectUUID); diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index b4b11b105c..1d215f680a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4111,10 +4111,13 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri // when the worker thread is started, call our engine's run.. connect(workerThread, &QThread::started, scriptEngine, &ScriptEngine::run); - + // when the thread is terminated, add both scriptEngine and thread to the deleteLater queue - connect(scriptEngine, SIGNAL(doneRunning()), scriptEngine, SLOT(deleteLater())); - connect(workerThread, SIGNAL(finished()), workerThread, SLOT(deleteLater())); + connect(scriptEngine, &ScriptEngine::doneRunning, scriptEngine, &ScriptEngine::deleteLater()); + connect(workerThread, &QThread::finished, workerThread, &Qthread::deleteLater); + + // tell the thread to stop when the script engine is done + connect(scriptEngine, &ScriptEngine::destroyed, workerThread, &QThread::quit); auto nodeList = DependencyManager::get(); connect(nodeList.data(), &NodeList::nodeKilled, scriptEngine, &ScriptEngine::nodeKilled); diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index c5e4946b9c..f7db354e75 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -386,7 +386,7 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) { _headData->_leanSideways = leanSideways; _headData->_torsoTwist = torsoTwist; } // 6 bytes - + { // Lookat Position glm::vec3 lookAt; memcpy(&lookAt, sourceBuffer, sizeof(lookAt)); diff --git a/libraries/avatars/src/AvatarHashMap.h b/libraries/avatars/src/AvatarHashMap.h index 105282dde3..804233b76a 100644 --- a/libraries/avatars/src/AvatarHashMap.h +++ b/libraries/avatars/src/AvatarHashMap.h @@ -36,14 +36,14 @@ public: public slots: bool isAvatarInRange(const glm::vec3 & position, const float range); +private slots: + void sessionUUIDChanged(const QUuid& sessionUUID, const QUuid& oldUUID); + void processAvatarDataPacket(QSharedPointer packet, SharedNodePointer sendingNode); void processAvatarIdentityPacket(QSharedPointer packet, SharedNodePointer sendingNode); void processAvatarBillboardPacket(QSharedPointer packet, SharedNodePointer sendingNode); void processKillAvatar(QSharedPointer packet, SharedNodePointer sendingNode); -private slots: - void sessionUUIDChanged(const QUuid& sessionUUID, const QUuid& oldUUID); - protected: AvatarHashMap(); diff --git a/libraries/networking/src/PacketReceiver.cpp b/libraries/networking/src/PacketReceiver.cpp index 973cc82e32..f59be35dc5 100644 --- a/libraries/networking/src/PacketReceiver.cpp +++ b/libraries/networking/src/PacketReceiver.cpp @@ -359,6 +359,11 @@ void PacketReceiver::processDatagrams() { << " (" << qPrintable(nameForPacketType(packet->getType())) << ")" << " has been destroyed. Removing from listener map."; it = _packetListenerMap.erase(it); + + // if it exists, remove the listener from _directlyConnectedObjects + _directConnectSetMutex.lock(); + _directlyConnectedObjects.remove(listener.first); + _directConnectSetMutex.unlock(); } } else { diff --git a/libraries/octree/src/JurisdictionMap.h b/libraries/octree/src/JurisdictionMap.h index 56879be1fc..b4294659d3 100644 --- a/libraries/octree/src/JurisdictionMap.h +++ b/libraries/octree/src/JurisdictionMap.h @@ -38,6 +38,7 @@ public: // standard assignment JurisdictionMap& operator=(const JurisdictionMap& other); // copy assignment + // application constructors JurisdictionMap(const char* filename); JurisdictionMap(unsigned char* rootOctalCode, const std::vector& endNodes); JurisdictionMap(const char* rootHextString, const char* endNodesHextString); diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index e99072de71..7bb62a01ab 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -720,12 +720,6 @@ void ScriptEngine::run() { } } - // If we were on a thread, then wait till it's done - // Unless we're an assignment-client, in which case that's handled for us - if (thread() && !_isAgent) { - thread()->quit(); - } - emit finished(_fileNameString); _isRunning = false;