Fix race condition in Movie destructor

This commit is contained in:
刘皓 2025-05-19 15:16:34 -04:00
parent 8cf251bd5d
commit 09ec1db6f4
No known key found for this signature in database
GPG key ID: 7901753DB465B711

View file

@ -397,6 +397,12 @@ struct Movie
~Movie() ~Movie()
{ {
if (hasAudio) { if (hasAudio) {
audioThreadTermReq.set();
if(audioThread) {
SDL_WaitThread(audioThread, 0);
audioThread = 0;
}
if (audioQueueTail) { if (audioQueueTail) {
THEORAPLAY_freeAudio(audioQueueTail->audio); THEORAPLAY_freeAudio(audioQueueTail->audio);
} }
@ -407,11 +413,6 @@ struct Movie
} }
audioQueueHead = NULL; audioQueueHead = NULL;
SDL_DestroyMutex(audioMutex); SDL_DestroyMutex(audioMutex);
audioThreadTermReq.set();
if(audioThread) {
SDL_WaitThread(audioThread, 0);
audioThread = 0;
}
alSourceStop(audioSource); alSourceStop(audioSource);
alDeleteSources(1, &audioSource); alDeleteSources(1, &audioSource);
alDeleteBuffers(STREAM_BUFS, alBuffers); alDeleteBuffers(STREAM_BUFS, alBuffers);