From 357963b6e0470c0b490706247eff32e393b0ef94 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 17 Jul 2015 11:06:39 -0700 Subject: [PATCH 1/7] fix reference to packet that is now buffer --- libraries/avatars/src/AvatarData.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index d990f60046..04f85bdf23 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -298,7 +298,7 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) { // = 51 bytes int minPossibleSize = 51; - int maxAvailableSize = packet.size() - offset; + int maxAvailableSize = buffer.size(); if (minPossibleSize > maxAvailableSize) { if (shouldLogError(now)) { qCDebug(avatars) << "Malformed AvatarData packet at the start; " From 7a13c867aed486e090a1c851372249515919b04d Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 17 Jul 2015 11:18:11 -0700 Subject: [PATCH 2/7] quit the ScriptEngine thread once the script is done --- interface/src/Application.cpp | 9 ++++++--- libraries/script-engine/src/ScriptEngine.cpp | 6 ------ 2 files changed, 6 insertions(+), 9 deletions(-) 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/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; From 1c98c5e02c12e0e8d780fb26fbfe66db0eccac1d Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 17 Jul 2015 11:20:05 -0700 Subject: [PATCH 3/7] remove unregisterListener that isn't needed anymore --- assignment-client/src/Agent.cpp | 3 --- 1 file changed, 3 deletions(-) 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); } From 08bd2adb51b08a1f32d29883d72eb98d34f82901 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 17 Jul 2015 13:58:14 -0700 Subject: [PATCH 4/7] remove dead listeners from set of directly connected objects --- libraries/networking/src/PacketReceiver.cpp | 5 +++++ 1 file changed, 5 insertions(+) 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 { From 8a2bb552312bea134a8589b3470524b4d449b7c3 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 17 Jul 2015 14:00:02 -0700 Subject: [PATCH 5/7] add back a removed comment from jurisdiction map --- libraries/octree/src/JurisdictionMap.h | 1 + 1 file changed, 1 insertion(+) 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); From 8ff8a17f02e42bdde4ac65ca4e7727b8efb87d2b Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 17 Jul 2015 14:17:48 -0700 Subject: [PATCH 6/7] remove TODO added for DS, check sockets --- domain-server/src/DomainServer.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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); From fe0cdc0529068482081dd1ab132a2df19691038f Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 17 Jul 2015 14:35:38 -0700 Subject: [PATCH 7/7] put AvatarHashMap slots back to private --- libraries/avatars/src/AvatarHashMap.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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();