diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 2b552de0ee..95a3c87494 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2525,6 +2525,7 @@ void Application::displaySide(Camera& whichCamera, bool selfAvatarOnly) { if (_voxelFades.size() > 0) { PerformanceWarning warn(Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings), "Application::displaySide() ... voxel fades..."); + _voxelFadesLock.lockForWrite(); for(std::vector::iterator fade = _voxelFades.begin(); fade != _voxelFades.end();) { fade->render(); if(fade->isDone()) { @@ -2533,6 +2534,7 @@ void Application::displaySide(Camera& whichCamera, bool selfAvatarOnly) { ++fade; } } + _voxelFadesLock.unlock(); } // give external parties a change to hook in @@ -3188,7 +3190,9 @@ void Application::nodeKilled(SharedNodePointer node) { fade.voxelDetails = rootDetails; const float slightly_smaller = 0.99f; fade.voxelDetails.s = fade.voxelDetails.s * slightly_smaller; + _voxelFadesLock.lockForWrite(); _voxelFades.push_back(fade); + _voxelFadesLock.unlock(); } // If the voxel server is going away, remove it from our jurisdiction map so we don't send voxels to a dead server @@ -3219,7 +3223,9 @@ void Application::nodeKilled(SharedNodePointer node) { fade.voxelDetails = rootDetails; const float slightly_smaller = 0.99f; fade.voxelDetails.s = fade.voxelDetails.s * slightly_smaller; + _voxelFadesLock.lockForWrite(); _voxelFades.push_back(fade); + _voxelFadesLock.unlock(); } // If the particle server is going away, remove it from our jurisdiction map so we don't send voxels to a dead server @@ -3251,7 +3257,9 @@ void Application::nodeKilled(SharedNodePointer node) { fade.voxelDetails = rootDetails; const float slightly_smaller = 0.99f; fade.voxelDetails.s = fade.voxelDetails.s * slightly_smaller; + _voxelFadesLock.lockForWrite(); _voxelFades.push_back(fade); + _voxelFadesLock.unlock(); } // If the model server is going away, remove it from our jurisdiction map so we don't send voxels to a dead server @@ -3336,7 +3344,9 @@ int Application::parseOctreeStats(const QByteArray& packet, const SharedNodePoin fade.voxelDetails = rootDetails; const float slightly_smaller = 0.99f; fade.voxelDetails.s = fade.voxelDetails.s * slightly_smaller; + _voxelFadesLock.lockForWrite(); _voxelFades.push_back(fade); + _voxelFadesLock.unlock(); } } // store jurisdiction details for later use diff --git a/interface/src/Application.h b/interface/src/Application.h index 1968ef4fee..77d948e708 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -533,6 +533,7 @@ private: NodeBounds _nodeBoundsDisplay; std::vector _voxelFades; + QReadWriteLock _voxelFadesLock; ControllerScriptingInterface _controllerScriptingInterface; QPointer _logDialog; QPointer _snapshotShareDialog;