Skip to content

Commit

Permalink
Clarifying hard-to-understand piece of code.
Browse files Browse the repository at this point in the history
  • Loading branch information
icculus committed Jul 23, 2014
1 parent 75dacdb commit 987c335
Showing 1 changed file with 18 additions and 6 deletions.
24 changes: 18 additions & 6 deletions src/audio/SDL_audio.c
Expand Up @@ -205,22 +205,34 @@ SDL_AudioOpenDevice_Default(_THIS, const char *devname, int iscapture)
return -1;
}

static SDL_INLINE SDL_bool
is_in_audio_device_thread(SDL_AudioDevice * device)
{
/* The device thread locks the same mutex, but not through the public API.
This check is in case the application, in the audio callback,
tries to lock the thread that we've already locked from the
device thread...just in case we only have non-recursive mutexes. */
if (device->thread && (SDL_ThreadID() == device->threadid)) {
return SDL_TRUE;
}

return SDL_FALSE;
}

static void
SDL_AudioLockDevice_Default(SDL_AudioDevice * device)
{
if (device->thread && (SDL_ThreadID() == device->threadid)) {
return;
if (!is_in_audio_device_thread(device)) {
SDL_LockMutex(device->mixer_lock);
}
SDL_LockMutex(device->mixer_lock);
}

static void
SDL_AudioUnlockDevice_Default(SDL_AudioDevice * device)
{
if (device->thread && (SDL_ThreadID() == device->threadid)) {
return;
if (!is_in_audio_device_thread(device)) {
SDL_UnlockMutex(device->mixer_lock);
}
SDL_UnlockMutex(device->mixer_lock);
}


Expand Down

0 comments on commit 987c335

Please sign in to comment.