From 363e5fb745df5b1128daf18dca2049125e310295 Mon Sep 17 00:00:00 2001 From: CST1229 <68464103+CST1229@users.noreply.github.com> Date: Fri, 11 Oct 2024 18:45:50 +0200 Subject: [PATCH] Lily/Skins: fix `delete all skins` not deleting the renderer skins (#1718) The code intended to delete the skins from the renderer when running the "delete all skins" block, but since it tried to iterate through the object like an array instead of iterating through the keys, it didn't work. This fixes a memory leak in the Skins extension. (Also changes the `createdSkins` variable from an array into an object, since it's used with string keys.) --- extensions/Lily/Skins.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/extensions/Lily/Skins.js b/extensions/Lily/Skins.js index d1b6431241..601663e4b3 100644 --- a/extensions/Lily/Skins.js +++ b/extensions/Lily/Skins.js @@ -40,7 +40,7 @@ const renderer = runtime.renderer; const Cast = Scratch.Cast; - var createdSkins = []; + var createdSkins = {}; class Skins { constructor() { @@ -371,9 +371,9 @@ deleteAllSkins() { this._refreshTargets(); - for (let i = 0; i < createdSkins.length; i++) - renderer.destroySkin(createdSkins[i]); - createdSkins = []; + for (const skinName in createdSkins) + renderer.destroySkin(createdSkins[skinName]); + createdSkins = {}; } restoreTargets(args) {