From b312edee4951a30154c62c8b7d13200b76bda1e7 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Mon, 11 Apr 2022 23:09:20 +0100 Subject: [PATCH] Fix snd_deinit called even if snd_init failed We were previously setting `was_sound_init` to true unconditionally after calling `snd_init`. However, `snd_init` can fail. Use `gbSndInited` instead. --- Source/diablo.cpp | 4 +--- Source/effects.cpp | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/diablo.cpp b/Source/diablo.cpp index cee2e9f9f..6b626cbcd 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -146,7 +146,6 @@ bool was_archives_init = false; /** To know if surfaces have been initialized or not */ bool was_window_init = false; bool was_ui_init = false; -bool was_snd_init = false; void StartGame(interface_mode uMsg) { @@ -1007,7 +1006,6 @@ void DiabloInit() DiabloInitScreen(); snd_init(); - was_snd_init = true; ui_sound_init(); @@ -1047,7 +1045,7 @@ void DiabloDeinit() { FreeItemGFX(); - if (was_snd_init) + if (gbSndInited) effects_cleanup_sfx(); snd_deinit(); if (was_ui_init) diff --git a/Source/effects.cpp b/Source/effects.cpp index 5e989bd3b..13758d622 100644 --- a/Source/effects.cpp +++ b/Source/effects.cpp @@ -1283,6 +1283,8 @@ void PlaySfxLoc(_sfx_id psfx, Point position, bool randomizeByCategory) void sound_stop() { + if (!gbSndInited) + return; ClearDuplicateSounds(); for (auto &sfx : sgSFX) { if (sfx.pSnd != nullptr) {