output_control: move code to ao_lock_command()

This commit is contained in:
Max Kellermann 2011-01-10 21:54:43 +01:00
parent 319ba94a52
commit db4aa81528
1 changed files with 15 additions and 9 deletions

View File

@ -62,6 +62,18 @@ ao_command(struct audio_output *ao, enum audio_output_command cmd)
ao_command_wait(ao); ao_command_wait(ao);
} }
/**
* Lock the #audio_output object and execute the command
* synchronously.
*/
static void
ao_lock_command(struct audio_output *ao, enum audio_output_command cmd)
{
g_mutex_lock(ao->mutex);
ao_command(ao, cmd);
g_mutex_unlock(ao->mutex);
}
void void
audio_output_enable(struct audio_output *ao) audio_output_enable(struct audio_output *ao)
{ {
@ -77,9 +89,7 @@ audio_output_enable(struct audio_output *ao)
audio_output_thread_start(ao); audio_output_thread_start(ao);
} }
g_mutex_lock(ao->mutex); ao_lock_command(ao, AO_COMMAND_ENABLE);
ao_command(ao, AO_COMMAND_ENABLE);
g_mutex_unlock(ao->mutex);
} }
void void
@ -96,9 +106,7 @@ audio_output_disable(struct audio_output *ao)
return; return;
} }
g_mutex_lock(ao->mutex); ao_lock_command(ao, AO_COMMAND_DISABLE);
ao_command(ao, AO_COMMAND_DISABLE);
g_mutex_unlock(ao->mutex);
} }
static void static void
@ -284,9 +292,7 @@ void audio_output_finish(struct audio_output *ao)
assert(ao->fail_timer == NULL); assert(ao->fail_timer == NULL);
if (ao->thread != NULL) { if (ao->thread != NULL) {
g_mutex_lock(ao->mutex); ao_lock_command(ao, AO_COMMAND_KILL);
ao_command(ao, AO_COMMAND_KILL);
g_mutex_unlock(ao->mutex);
g_thread_join(ao->thread); g_thread_join(ao->thread);
} }