From 0bc914bf1986bb1792456795efe4e57fc6c0e3a9 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 1 Dec 2015 19:33:44 -0800 Subject: [PATCH] Don't grab subTree outside lock --- assignment-client/src/octree/OctreeSendThread.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/assignment-client/src/octree/OctreeSendThread.cpp b/assignment-client/src/octree/OctreeSendThread.cpp index 84caf9ce81..b1fd37fe85 100644 --- a/assignment-client/src/octree/OctreeSendThread.cpp +++ b/assignment-client/src/octree/OctreeSendThread.cpp @@ -417,10 +417,15 @@ int OctreeSendThread::packetDistributor(OctreeQueryNode* nodeData, bool viewFrus quint64 startInside = usecTimestampNow(); bool lastNodeDidntFit = false; // assume each node fits - if (OctreeElementPointer subTree = nodeData->elementBag.extract()) { + if (!nodeData->elementBag.isEmpty()) { quint64 lockWaitStart = usecTimestampNow(); _myServer->getOctree()->withReadLock([&]{ + OctreeElementPointer subTree = nodeData->elementBag.extract(); + if (!subTree) { + return; + } + quint64 lockWaitEnd = usecTimestampNow(); lockWaitElapsedUsec = (float)(lockWaitEnd - lockWaitStart); quint64 encodeStart = usecTimestampNow();