mirror of
https://github.com/libSDL2pp/libSDL2pp.git
synced 2025-08-03 10:55:57 -04:00
It is actually safe to free chunks which are still playing
Though documentation and even a comment at the start of Mix_FreeChunk() state that it's unsafe to free chunk which is still being played, the function actually contains the code to stop all playback of a chunk which is being freed. See SDL2_mixer 2.0.0, mixer.c:759: /* Guarantee that this chunk isn't playing */ SDL_LockAudio(); if ( mix_channel ) { for ( i=0; i<num_channels; ++i ) { if ( chunk == mix_channel[i].chunk ) { mix_channel[i].playing = 0; mix_channel[i].looping = 0; } } } SDL_UnlockAudio(); As a result, no special actions are required to stop Mixer playback before destruction of the Chunks (which is a common case with SDL2pp, as Chunks may only be constructed after Mixer is created, and are correspondingly destroyed in reverse order, e.g. before Mixer).
This commit is contained in:
parent
1cc64cea4f
commit
e37d67725e
@ -80,6 +80,13 @@ public:
|
||||
///
|
||||
/// \see https://www.libsdl.org/projects/SDL_mixer/docs/SDL_mixer.html#SEC24
|
||||
///
|
||||
/// \note Despite what Mix_FreeChunk() documentation (and even
|
||||
/// comment in function implementation) says, right after
|
||||
/// the named comment there's a code which stops playback
|
||||
/// of any channel which plays the chunk being freed.
|
||||
/// Thus, it is safe to destroy Chunk before destroying
|
||||
/// Mixer, even if it still plays the chunk.
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
~Chunk();
|
||||
|
||||
|
@ -73,9 +73,6 @@ int main() try {
|
||||
|
||||
SDL_Delay(2000);
|
||||
|
||||
// Make sure no sounds are being played before destroying Chunk
|
||||
mixer.HaltChannel();
|
||||
|
||||
return 0;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << "Error: " << e.what() << std::endl;
|
||||
|
Loading…
x
Reference in New Issue
Block a user