From 602742d87076524269ad3ad33185c255324bc869 Mon Sep 17 00:00:00 2001 From: Kiley Holbrook Date: Tue, 14 Oct 2025 09:56:53 -0500 Subject: [PATCH] Resolves #912 - Seg fault caused by m_sprites modification during iteration --- src/libprojectM/UserSprites/SpriteManager.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/libprojectM/UserSprites/SpriteManager.cpp b/src/libprojectM/UserSprites/SpriteManager.cpp index d8aef4d8c2..fa8a6c3c86 100644 --- a/src/libprojectM/UserSprites/SpriteManager.cpp +++ b/src/libprojectM/UserSprites/SpriteManager.cpp @@ -62,14 +62,21 @@ void SpriteManager::Draw(const Audio::FrameAudioData& audioData, uint32_t outputFramebufferObject, Sprite::PresetList presets) { + std::vector toDestroy; + for (auto& idAndSprite : m_sprites) { idAndSprite.second->Draw(audioData, renderContext, outputFramebufferObject, presets); if (idAndSprite.second->Done()) { - Destroy(idAndSprite.first); + toDestroy.push_back(idAndSprite.first); } } + + for (auto id : toDestroy) + { + Destroy(id); + } } void SpriteManager::Destroy(SpriteIdentifier spriteIdentifier)