From 09839f3c41a3d20957d13d76974d02074ec4da4c Mon Sep 17 00:00:00 2001 From: "dongsug.song" Date: Mon, 22 Nov 2021 16:35:36 +0900 Subject: [PATCH] Revert "[Tizen] Let range for loop don't touch container at RenderManager" This reverts commit 4c4c6bf206ad121acc41ce145c88fbb54e86f5f2. --- dali/internal/render/common/render-manager.cpp | 37 +++++++++++++++----------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/dali/internal/render/common/render-manager.cpp b/dali/internal/render/common/render-manager.cpp index 81d2582..5079c33 100644 --- a/dali/internal/render/common/render-manager.cpp +++ b/dali/internal/render/common/render-manager.cpp @@ -255,13 +255,15 @@ void RenderManager::RemoveTexture(Render::Texture* texture) { DALI_ASSERT_DEBUG(NULL != texture); - // Find the texture, use std::find so we can do the erase safely - auto iter = std::find(mImpl->textureContainer.begin(), mImpl->textureContainer.end(), texture); - - if(iter != mImpl->textureContainer.end()) + // Find the texture, use reference to pointer so we can do the erase safely + for(auto&& iter : mImpl->textureContainer) { - texture->Destroy(); - mImpl->textureContainer.Erase(iter); // Texture found; now destroy it + if(iter == texture) + { + texture->Destroy(); + mImpl->textureContainer.Erase(&iter); // Texture found; now destroy it + return; + } } } @@ -299,13 +301,16 @@ void RenderManager::RemoveFrameBuffer(Render::FrameBuffer* frameBuffer) { DALI_ASSERT_DEBUG(nullptr != frameBuffer); - // Find the framebuffer, use std:find so we can safely do the erase - auto iter = std::find(mImpl->frameBufferContainer.begin(), mImpl->frameBufferContainer.end(), frameBuffer); - - if(iter != mImpl->frameBufferContainer.end()) + // Find the sampler, use reference so we can safely do the erase + for(auto&& iter : mImpl->frameBufferContainer) { - frameBuffer->Destroy(); - mImpl->frameBufferContainer.Erase(iter); // frameBuffer found; now destroy it + if(iter == frameBuffer) + { + frameBuffer->Destroy(); + mImpl->frameBufferContainer.Erase(&iter); // frameBuffer found; now destroy it + + break; + } } } @@ -376,11 +381,13 @@ void RenderManager::AddGeometry(OwnerPointer& geometry) void RenderManager::RemoveGeometry(Render::Geometry* geometry) { - auto iter = std::find(mImpl->geometryContainer.begin(), mImpl->geometryContainer.end(), geometry); + auto it = std::find_if(mImpl->geometryContainer.begin(), mImpl->geometryContainer.end(), [geometry](auto& item) { + return geometry == item; + }); - if(iter != mImpl->geometryContainer.end()) + if(it != mImpl->geometryContainer.end()) { - mImpl->geometryContainer.Erase(iter); + mImpl->geometryContainer.Erase(it); } } -- 2.7.4