-/*****************************************************************************
- * vlc_cond_wait: wait until condition completion
- *****************************************************************************/
-#define vlc_cond_wait( P_COND, P_MUTEX ) \
- __vlc_cond_wait( __FILE__, __LINE__, P_COND, P_MUTEX )
-
-static inline void __vlc_cond_wait( const char * psz_file, int i_line,
- vlc_cond_t *p_condvar, vlc_mutex_t *p_mutex )
-{
-#if defined(LIBVLC_USE_PTHREAD)
- int val = pthread_cond_wait( p_condvar, p_mutex );
- VLC_THREAD_ASSERT ("waiting on condition");
-
-#elif defined( UNDER_CE )
- p_condvar->i_waiting_threads++;
- LeaveCriticalSection( &p_mutex->csection );
- WaitForSingleObject( p_condvar->event, INFINITE );
- p_condvar->i_waiting_threads--;
-
- /* Reacquire the mutex before returning. */
- vlc_mutex_lock( p_mutex );
-
-#elif defined( WIN32 )
- (void)psz_file; (void)i_line;
-
- /* Increase our wait count */
- p_condvar->i_waiting_threads++;
- SignalObjectAndWait( *p_mutex, p_condvar->event, INFINITE, FALSE );
- p_condvar->i_waiting_threads--;
-
- /* Reacquire the mutex before returning. */
- vlc_mutex_lock( p_mutex );
-
-#elif defined( SYS_BEOS )
- /* The p_condvar->thread var is initialized before the unlock because
- * it enables to identify when the thread is interrupted beetwen the
- * unlock line and the suspend_thread line */
- p_condvar->thread = find_thread( NULL );
- vlc_mutex_unlock( p_mutex );
- suspend_thread( p_condvar->thread );
- p_condvar->thread = -1;
-
- vlc_mutex_lock( p_mutex );
-
-#endif
-}
-
-
-/*****************************************************************************
- * vlc_cond_timedwait: wait until condition completion or expiration
- *****************************************************************************
- * Returns 0 if object signaled, an error code in case of timeout or error.
- *****************************************************************************/
-#define vlc_cond_timedwait( P_COND, P_MUTEX, DEADLINE ) \
- __vlc_cond_timedwait( __FILE__, __LINE__, P_COND, P_MUTEX, DEADLINE )
-
-static inline int __vlc_cond_timedwait( const char * psz_file, int i_line,
- vlc_cond_t *p_condvar,
- vlc_mutex_t *p_mutex,
- mtime_t deadline )
-{
-#if defined(LIBVLC_USE_PTHREAD)
- lldiv_t d = lldiv( deadline, 1000000 );
- struct timespec ts = { d.quot, d.rem * 1000 };
-
- int val = pthread_cond_timedwait (p_condvar, p_mutex, &ts);
- if (val == ETIMEDOUT)
- return ETIMEDOUT; /* this error is perfectly normal */
- VLC_THREAD_ASSERT ("timed-waiting on condition");
-
-#elif defined( UNDER_CE )
- mtime_t delay_ms = (deadline - mdate())/1000;
- DWORD result;
- if( delay_ms < 0 )
- delay_ms = 0;
-
- p_condvar->i_waiting_threads++;
- LeaveCriticalSection( &p_mutex->csection );
- result = WaitForSingleObject( p_condvar->event, delay_ms );
- p_condvar->i_waiting_threads--;
-
- /* Reacquire the mutex before returning. */
- vlc_mutex_lock( p_mutex );
-
- if(result == WAIT_TIMEOUT)
- return ETIMEDOUT; /* this error is perfectly normal */
-
- (void)psz_file; (void)i_line;
-
-#elif defined( WIN32 )
- mtime_t delay_ms = (deadline - mdate())/1000;
- DWORD result;
- if( delay_ms < 0 )
- delay_ms = 0;
-
- /* Increase our wait count */
- p_condvar->i_waiting_threads++;
- result = SignalObjectAndWait( *p_mutex, p_condvar->event,
- delay_ms, FALSE );
- p_condvar->i_waiting_threads--;
-
- /* Reacquire the mutex before returning. */
- vlc_mutex_lock( p_mutex );
- if(result == WAIT_TIMEOUT)
- return ETIMEDOUT; /* this error is perfectly normal */
-
- (void)psz_file; (void)i_line;
-
-#elif defined( SYS_BEOS )
-# error Unimplemented
-
-#endif