-#if defined(LIBVLC_USE_PTHREAD)
- int val = pthread_cond_wait( p_condvar, p_mutex );
- VLC_THREAD_ASSERT ("waiting on condition");
-
-#elif defined( UNDER_CE )
- LeaveCriticalSection( &p_mutex->csection );
- WaitForSingleObject( *p_condvar, INFINITE );
-
- /* Reacquire the mutex before returning. */
- vlc_mutex_lock( p_mutex );
-
-#elif defined( WIN32 )
- (void)psz_file; (void)i_line;
-
- /* Increase our wait count */
- SignalObjectAndWait( *p_mutex, *p_condvar, INFINITE, FALSE );
-
- /* 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;
-
- LeaveCriticalSection( &p_mutex->csection );
- result = WaitForSingleObject( *p_condvar, delay_ms );
-
- /* 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 total = (deadline - mdate())/1000;
- DWORD result;
- if( total < 0 )
- total = 0;
-
- do
- {
- DWORD delay = (total > 0x7fffffff) ? 0x7fffffff : total;
- result = SignalObjectAndWait( *p_mutex, *p_condvar,
- delay, FALSE );
- total -= delay;
- vlc_mutex_lock (p_mutex);
- }
- while (total);
-
- /* Reacquire the mutex before returning. */
- if(result == WAIT_TIMEOUT)
- return ETIMEDOUT; /* this error is perfectly normal */
-
- (void)psz_file; (void)i_line;
-
-#elif defined( SYS_BEOS )
-# error Unimplemented
-
-#endif
-
- return 0;
-}
-
-/*****************************************************************************
- * vlc_cond_destroy: destroy a condition
- *****************************************************************************/
-#define vlc_cond_destroy( P_COND ) \
- __vlc_cond_destroy( __FILE__, __LINE__, P_COND )
-
-/*****************************************************************************
- * vlc_threadvar_set: create: set the value of a thread-local variable
- *****************************************************************************/
-static inline int vlc_threadvar_set( vlc_threadvar_t * p_tls, void *p_value )
-{
- int i_ret;
-
-#if defined(LIBVLC_USE_PTHREAD)
- i_ret = pthread_setspecific( *p_tls, p_value );