diff -rupN vlc-2.2.1-old/src/input/decoder.c vlc-2.2.1-new/src/input/decoder.c
--- vlc-2.2.1-old/src/input/decoder.c	2015-03-12 19:03:18.000000000 -0400
+++ vlc-2.2.1-new/src/input/decoder.c	2015-03-13 10:28:30.000000000 -0400
@@ -1112,11 +1112,10 @@ static void DecoderWaitDate( decoder_t *
 {
     decoder_owner_sys_t *p_owner = p_dec->p_owner;
 
-    vlc_assert_locked( &p_owner->lock );
 
     if( *pb_reject || i_deadline < 0 )
         return;
-
+	vlc_mutex_lock( &p_owner->lock );
     do
     {
         if( p_owner->b_flushing || p_owner->b_exit )
@@ -1127,6 +1126,7 @@ static void DecoderWaitDate( decoder_t *
     }
     while( vlc_cond_timedwait( &p_owner->wait_request, &p_owner->lock,
                                i_deadline ) == 0 );
+    vlc_mutex_unlock( &p_owner->lock );
 }
 
 static void DecoderPlayAudio( decoder_t *p_dec, block_t *p_audio,
@@ -1169,6 +1169,8 @@ static void DecoderPlayAudio( decoder_t
 
         DecoderFixTs( p_dec, &p_audio->i_pts, NULL, &p_audio->i_length,
                       &i_rate, AOUT_MAX_ADVANCE_TIME );
+         
+        vlc_mutex_unlock( &p_owner->lock );
 
         if( p_audio->i_pts <= VLC_TS_INVALID
          || i_rate < INPUT_RATE_DEFAULT/AOUT_MAX_INPUT_RATE
@@ -1183,7 +1185,7 @@ static void DecoderPlayAudio( decoder_t
         if( p_aout == NULL )
             b_reject = true;
 
-        if( !b_reject )
+		if( !b_reject )
         {
             assert( !p_owner->b_paused );
             if( !aout_DecPlay( p_aout, p_audio, i_rate ) )
@@ -1458,7 +1464,7 @@ static void DecoderPlaySpu( decoder_t *p
 
     DecoderFixTs( p_dec, &p_subpic->i_start, &p_subpic->i_stop, NULL,
                   NULL, INT64_MAX );
-
+	vlc_mutex_unlock( &p_owner->lock );
     if( p_subpic->i_start <= VLC_TS_INVALID )
         b_reject = true;
 
