[Tizen] Remove observer from mLoadQueue when we request to remove observer 08/300708/1
authorEunki, Hong <eunkiki.hong@samsung.com>
Wed, 1 Nov 2023 04:18:13 +0000 (13:18 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Wed, 1 Nov 2023 04:32:23 +0000 (13:32 +0900)
That might be happen during ResourceReady signal observing

- Add
- Remove
- Add

If than, the added request added in mLoadQueue 2 times.
and Remove request try to remove observe there (but will be failed actually.)

So, the visual get LoadCompleted signal twice.

It might have some logical problem in AnimatedImageVisual.
So let we keep ensure that 1-observer can only emit only 1-time.

Change-Id: I3eee087118cf62761709b8416fe09cf52094d156
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali-toolkit/internal/texture-manager/texture-manager-impl.cpp

index 3b212c3..72c09ad 100644 (file)
@@ -761,6 +761,19 @@ void TextureManager::RequestRemove(const TextureManager::TextureId& textureId, T
         Adaptor::Get().RegisterProcessor(*this, true);
       }
     }
+    else
+    {
+      // Given textureId might exist at load queue.
+      // Remove observer from the LoadQueue
+      for(auto&& element : mLoadQueue)
+      {
+        if(element.mObserver == observer)
+        {
+          element.mObserver = nullptr;
+          break;
+        }
+      }
+    }
   }
 }
 
@@ -1514,6 +1527,19 @@ void TextureManager::RemoveTextureObserver(TextureManager::TextureInfo& textureI
       observer->DestructionSignal().Disconnect(this, &TextureManager::ObserverDestroyed);
       textureInfo.observerList.Erase(iter);
     }
+    else
+    {
+      // Given textureId might exist at load queue.
+      // Remove observer from the LoadQueue
+      for(auto&& element : mLoadQueue)
+      {
+        if(element.mObserver == observer)
+        {
+          element.mObserver = nullptr;
+          break;
+        }
+      }
+    }
   }
 }