X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmedia%2Fsound-ao.c;h=ee69cdb28f77adf3de8ae18dab203ea84a8f3d5d;hb=a57c5abdde2eab0ac2d2d9db211bbe274b7be6f1;hp=6cc903071f7fa884883fe221ef167843d8a805c2;hpb=0f123bce9031ac63ec3233d5d14c3b83c74fd5ba;p=sxemacs diff --git a/src/media/sound-ao.c b/src/media/sound-ao.c index 6cc9030..ee69cdb 100644 --- a/src/media/sound-ao.c +++ b/src/media/sound-ao.c @@ -375,29 +375,27 @@ sound_ao_play(audio_job_t aj) #endif SXE_MUTEX_LOCK(&aj->mtx); - mtp = aj->play_state; - SXE_MUTEX_UNLOCK(&aj->mtx); - switch (mtp) { + switch (aj->play_state) { case MTPSTATE_RUN: - if (!ao_push(aj, resolution)) { - SXE_MUTEX_LOCK(&aj->mtx); - mtp = aj->play_state = MTPSTATE_STOP; - SXE_MUTEX_UNLOCK(&aj->mtx); - } + if (!ao_push(aj, resolution)) + aj->play_state = MTPSTATE_STOP; break; case MTPSTATE_PAUSE: - AO_DEBUG("sleeping for %d\n", resolution); - usleep(resolution); - break; + /* must sleep resolution outside of lock */ case MTPSTATE_UNKNOWN: case MTPSTATE_STOP: case NUMBER_OF_MEDIA_THREAD_PLAY_STATES: default: AO_DEBUG("ACK, quit\n"); - SXE_MUTEX_LOCK(&aj->mtx); - mtp = aj->play_state = MTPSTATE_STOP; - SXE_MUTEX_UNLOCK(&aj->mtx); + aj->play_state = MTPSTATE_STOP; + break; + } + mtp = aj->play_state; + SXE_MUTEX_UNLOCK(&aj->mtx); + if (mtp == MTPSTATE_PAUSE) { + AO_DEBUG("sleeping for %d\n", resolution); + usleep(resolution); break; } }