From 21966fe3452e6b68ec6203452cbb6441dce3660d Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Fri, 7 Jun 2019 11:14:07 -0700 Subject: [PATCH] Fix stuck transition due to removing sub render items before parent --- libraries/render/src/render/Scene.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/libraries/render/src/render/Scene.cpp b/libraries/render/src/render/Scene.cpp index c516a833de..bea111edb5 100644 --- a/libraries/render/src/render/Scene.cpp +++ b/libraries/render/src/render/Scene.cpp @@ -558,14 +558,20 @@ void Scene::removeItemTransition(ItemID itemId) { auto& item = _items[itemId]; TransitionStage::Index transitionId = item.getTransitionId(); if (!render::TransitionStage::isIndexInvalid(transitionId)) { - auto finishedOperators = _transitionFinishedOperatorMap[transitionId]; - for (auto finishedOperator : finishedOperators) { - if (finishedOperator) { - finishedOperator(); + const auto& transition = transitionStage->getTransition(transitionId); + const auto transitionOwner = transition.itemId; + if (transitionOwner == itemId) { + // No more items will be using this transition. Clean it up. + auto finishedOperators = _transitionFinishedOperatorMap[transitionId]; + for (auto finishedOperator : finishedOperators) { + if (finishedOperator) { + finishedOperator(); + } } + _transitionFinishedOperatorMap.erase(transitionId); + transitionStage->removeTransition(transitionId); } - _transitionFinishedOperatorMap.erase(transitionId); - transitionStage->removeTransition(transitionId); + setItemTransition(itemId, render::TransitionStage::INVALID_INDEX); } }