From 058b1ec1405140b5570ce843a9e5c5a94484a207 Mon Sep 17 00:00:00 2001 From: Valentin ROBIN Date: Wed, 26 Aug 2026 18:42:58 +0200 Subject: [PATCH] =?UTF-8?q?Corrige=20une=20fuite=20m=C3=A9moire=20dans=20L?= =?UTF-8?q?a=20Corne=20d'Abondance=20(page=20blanche=20sur=20iPhone=20apr?= =?UTF-8?q?=C3=A8s=20plusieurs=20minutes)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit À chaque fusion, les id matter-js des deux pièces étaient ajoutés à un Set pour empêcher une double fusion sur la même frame, mais jamais retirés pendant la partie — seulement vidés au redémarrage complet. Sur une longue partie avec beaucoup de fusions, ce Set grossissait sans jamais être nettoyé, contribuant à faire grimper la mémoire jusqu'à ce que Safari/iOS recharge la page de force. Les id sont maintenant retirés dès qu'une fusion est traitée. Co-Authored-By: Claude Sonnet 5 --- src/app/corne/melon-game.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/app/corne/melon-game.tsx b/src/app/corne/melon-game.tsx index 00b1b40..38f2d15 100644 --- a/src/app/corne/melon-game.tsx +++ b/src/app/corne/melon-game.tsx @@ -325,6 +325,15 @@ export function MelonGame({ bodiesRef.current.delete(merge.pieceIdB); nodeRefs.current.delete(merge.pieceIdA); nodeRefs.current.delete(merge.pieceIdB); + // Fuite mémoire corrigée ici : ces deux identifiants (les vrais id + // matter-js, pas les pieceId de l'app) étaient ajoutés à chaque + // fusion détectée dans collisionStart mais jamais retirés pendant + // la partie — seulement vidés au redémarrage complet du jeu. Sur + // une longue partie avec beaucoup de fusions, ce Set grossissait + // sans jamais être nettoyé (constaté en prod sur iPhone : page + // blanche puis rechargement après plusieurs minutes de jeu). + mergingBodyIdsRef.current.delete(bodyA.id); + mergingBodyIdsRef.current.delete(bodyB.id); removedIds.push(merge.pieceIdA, merge.pieceIdB); if (merge.tier < maxTier) {