+/**
+ * If *pb_reject, it does nothing, otherwise it waits for the given
+ * deadline or a flush request (in which case it set *pi_reject to true.
+ */
+static void DecoderWaitDate( decoder_t *p_dec,
+ bool *pb_reject, mtime_t i_deadline )
+{
+ decoder_owner_sys_t *p_owner = p_dec->p_owner;
+
+ if( *pb_reject || i_deadline < 0 )
+ return;
+
+ for( ;; )
+ {
+ vlc_mutex_lock( &p_owner->lock );
+ if( p_owner->b_flushing || p_dec->b_die )
+ {
+ *pb_reject = true;
+ vlc_mutex_unlock( &p_owner->lock );
+ break;
+ }
+ int i_ret = vlc_cond_timedwait( &p_owner->wait_request, &p_owner->lock,
+ i_deadline );
+ vlc_mutex_unlock( &p_owner->lock );
+ if( i_ret )
+ break;
+ }
+}
+