Revert "[Tizen] Let range for loop don't touch container at RenderManager"
authorTaehyub Kim <taehyub.kim@samsung.com>
Mon, 8 Nov 2021 05:38:41 +0000 (14:38 +0900)
committerTaehyub Kim <taehyub.kim@samsung.com>
Mon, 8 Nov 2021 05:38:41 +0000 (14:38 +0900)
This reverts commit 8e3802536c6d31422a6ffc54b5ada8f33923c5a3.

dali/internal/render/common/render-manager.cpp

index 81d2582..5079c33 100644 (file)
@@ -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<Render::Geometry>& 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);
   }
 }