From 7b74f7407a9247e339ddc9081cfa0fae5617f846 Mon Sep 17 00:00:00 2001 From: AlessandroSigna Date: Wed, 6 Jan 2016 16:17:28 -0800 Subject: [PATCH 1/3] Threadsafe access to EntityTree in OverlayPanel --- interface/src/ui/overlays/OverlayPanel.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/interface/src/ui/overlays/OverlayPanel.cpp b/interface/src/ui/overlays/OverlayPanel.cpp index 3d7b93822e..7c52a9030e 100644 --- a/interface/src/ui/overlays/OverlayPanel.cpp +++ b/interface/src/ui/overlays/OverlayPanel.cpp @@ -170,9 +170,10 @@ void OverlayPanel::applyTransformTo(Transform& transform, bool force) { transform.setTranslation(DependencyManager::get()->getMyAvatar() ->getPosition()); } else if (!_anchorPositionBindEntity.isNull()) { - transform.setTranslation(DependencyManager::get() - ->getEntityTree()->findEntityByID(_anchorPositionBindEntity) - ->getPosition()); + EntityTreePointer entityTree = DependencyManager::get()->getEntityTree(); + entityTree->withReadLock([&] { + transform.setTranslation(entityTree->findEntityByID(_anchorPositionBindEntity)->getPosition()); + }); } else { transform.setTranslation(getAnchorPosition()); } @@ -181,9 +182,10 @@ void OverlayPanel::applyTransformTo(Transform& transform, bool force) { transform.setRotation(DependencyManager::get()->getMyAvatar() ->getOrientation()); } else if (!_anchorRotationBindEntity.isNull()) { - transform.setRotation(DependencyManager::get() - ->getEntityTree()->findEntityByID(_anchorRotationBindEntity) - ->getRotation()); + EntityTreePointer entityTree = DependencyManager::get()->getEntityTree(); + entityTree->withReadLock([&] { + transform.setRotation(entityTree->findEntityByID(_anchorRotationBindEntity)->getRotation()); + }); } else { transform.setRotation(getAnchorRotation()); } From 18390c87dacd4675b3e0e9deb04b153e57a75591 Mon Sep 17 00:00:00 2001 From: AlessandroSigna Date: Thu, 7 Jan 2016 10:11:02 -0800 Subject: [PATCH 2/3] handling NULL pointer --- interface/src/ui/overlays/OverlayPanel.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/interface/src/ui/overlays/OverlayPanel.cpp b/interface/src/ui/overlays/OverlayPanel.cpp index 7c52a9030e..9e82a2507c 100644 --- a/interface/src/ui/overlays/OverlayPanel.cpp +++ b/interface/src/ui/overlays/OverlayPanel.cpp @@ -172,7 +172,10 @@ void OverlayPanel::applyTransformTo(Transform& transform, bool force) { } else if (!_anchorPositionBindEntity.isNull()) { EntityTreePointer entityTree = DependencyManager::get()->getEntityTree(); entityTree->withReadLock([&] { - transform.setTranslation(entityTree->findEntityByID(_anchorPositionBindEntity)->getPosition()); + EntityItemPointer foundEntity = entityTree->findEntityByID(_anchorPositionBindEntity); + if (foundEntity != NULL) { + transform.setTranslation(foundEntity->getPosition()); + } }); } else { transform.setTranslation(getAnchorPosition()); @@ -184,7 +187,10 @@ void OverlayPanel::applyTransformTo(Transform& transform, bool force) { } else if (!_anchorRotationBindEntity.isNull()) { EntityTreePointer entityTree = DependencyManager::get()->getEntityTree(); entityTree->withReadLock([&] { - transform.setRotation(entityTree->findEntityByID(_anchorRotationBindEntity)->getRotation()); + EntityItemPointer foundEntity = entityTree->findEntityByID(_anchorRotationBindEntity); + if (foundEntity != NULL) { + transform.setRotation(foundEntity->getRotation()); + } }); } else { transform.setRotation(getAnchorRotation()); From eaa67a41dd6e62cb739919ec6a938089f57be862 Mon Sep 17 00:00:00 2001 From: AlessandroSigna Date: Thu, 7 Jan 2016 11:08:11 -0800 Subject: [PATCH 3/3] Following coding standard --- interface/src/ui/overlays/OverlayPanel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/ui/overlays/OverlayPanel.cpp b/interface/src/ui/overlays/OverlayPanel.cpp index 9e82a2507c..7db2c6f8a2 100644 --- a/interface/src/ui/overlays/OverlayPanel.cpp +++ b/interface/src/ui/overlays/OverlayPanel.cpp @@ -173,7 +173,7 @@ void OverlayPanel::applyTransformTo(Transform& transform, bool force) { EntityTreePointer entityTree = DependencyManager::get()->getEntityTree(); entityTree->withReadLock([&] { EntityItemPointer foundEntity = entityTree->findEntityByID(_anchorPositionBindEntity); - if (foundEntity != NULL) { + if (foundEntity) { transform.setTranslation(foundEntity->getPosition()); } }); @@ -188,7 +188,7 @@ void OverlayPanel::applyTransformTo(Transform& transform, bool force) { EntityTreePointer entityTree = DependencyManager::get()->getEntityTree(); entityTree->withReadLock([&] { EntityItemPointer foundEntity = entityTree->findEntityByID(_anchorRotationBindEntity); - if (foundEntity != NULL) { + if (foundEntity) { transform.setRotation(foundEntity->getRotation()); } });