From 4621c13b7542f00577d4b742fa264248318d14c5 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Sat, 2 Jan 2021 09:05:20 +0900 Subject: [PATCH] Do not stack-allocate MAKOMidi It causes stack overflow in MSVS build. --- src/linux/mako.cpp | 8 ++++---- src/win/mako.cpp | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/linux/mako.cpp b/src/linux/mako.cpp index 6972bbd..4737e70 100644 --- a/src/linux/mako.cpp +++ b/src/linux/mako.cpp @@ -119,10 +119,10 @@ void MAKO::play_music(int page) Mix_HookMusic(&FMHook, this); SDL_UnlockMutex(fm_mutex); } else { - MAKOMidi midi(nact, amus); - if (midi.load_mml(page)) { - midi.load_mda(page); - smf = midi.generate_smf(next_loop); + auto midi = std::make_unique(nact, amus); + if (midi->load_mml(page)) { + midi->load_mda(page); + smf = midi->generate_smf(next_loop); SDL_RWops *rwops = SDL_RWFromConstMem(smf.data(), smf.size()); mix_music = Mix_LoadMUSType_RW(rwops, MUS_MID, SDL_TRUE /* freesrc */); if (!mix_music) { diff --git a/src/win/mako.cpp b/src/win/mako.cpp index c73e012..9320b8d 100644 --- a/src/win/mako.cpp +++ b/src/win/mako.cpp @@ -161,8 +161,8 @@ public: playing = true; } - Music(MAKOMidi& midi, int loop) : loops(loop ? 1 : 0) { - std::vector smf = midi.generate_smf(loop); + Music(std::unique_ptr midi, int loop) : loops(loop ? 1 : 0) { + std::vector smf = midi->generate_smf(loop); char path[MAX_PATH + 1]; if (!GetTempPath(sizeof(path), path)) { WARNING("GetTempPath failed: 0x%x", GetLastError()); @@ -335,11 +335,11 @@ void MAKO::play_music(int page) SDL_UnlockMutex(fm_mutex); SDL_PauseAudio(0); } else { - MAKOMidi midi(nact, amus); - if (!midi.load_mml(page)) + auto midi = std::make_unique(nact, amus); + if (!midi->load_mml(page)) return; - midi.load_mda(page); - music = new Music(midi, next_loop); + midi->load_mda(page); + music = new Music(std::move(midi), next_loop); } current_music = page; }