+ TextureUploadObserver* observer = info->observerList[0];
+
+ // During UploadComplete() a Control ResourceReady() signal is emitted.
+ // During that signal the app may add remove /add Textures (e.g. via
+ // ImageViews). At this point no more observers can be added to the
+ // observerList, because textureInfo.loadState = UPLOADED. However it is
+ // possible for observers to be removed, hence we check the observer list
+ // count every iteration.
+
+ // The reference to the textureInfo struct can also become invalidated,
+ // because new load requests can modify the mTextureInfoContainer list
+ // (e.g. if more requests are pushed back it can cause the list to be
+ // resized invalidating the reference to the TextureInfo ).
+ observer->UploadComplete( success, info->textureId, info->textureSet, info->useAtlas, info->atlasRect );
+ observer->DestructionSignal().Disconnect( this, &TextureManager::ObserverDestroyed );
+
+ // Get the textureInfo from the container again as it may have been
+ // invalidated,
+
+ int textureInfoIndex = GetCacheIndexFromId( textureId );
+ if( textureInfoIndex == INVALID_CACHE_INDEX)