From 9af4051b679a5e1e12564205f29fc9096f3ab85e Mon Sep 17 00:00:00 2001 From: Hiren Kangad Date: Tue, 10 Mar 2026 20:09:24 +0530 Subject: [PATCH] fix: release GIF ref on sprite destroy to prevent gifCache leak Override destroy() in AnimatedGifSprite to call releaseGif() when a loaded GIF item is deleted from the board. Without this, the gifCache refCount stays elevated until full canvas teardown. --- frontend/src/canvas/sprites/AnimatedGifSprite.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/frontend/src/canvas/sprites/AnimatedGifSprite.ts b/frontend/src/canvas/sprites/AnimatedGifSprite.ts index 64270d2..64f9380 100644 --- a/frontend/src/canvas/sprites/AnimatedGifSprite.ts +++ b/frontend/src/canvas/sprites/AnimatedGifSprite.ts @@ -128,6 +128,19 @@ export class AnimatedGifSprite extends Container { } } + /** Release ref-counted GIF source on destroy (handles deletion while loaded). */ + override destroy(options?: any): void { + if (this.loaded) { + if (this._gif) { + this._gif.stop(); + this._playing = false; + } + this.textures.releaseGif(this.assetKey); + this.loaded = false; + } + super.destroy(options); + } + /** Unload GIF to free memory (ref-counted). Called by viewport culling. */ unloadTexture(): void { if (!this.loaded) return;