* This header provides a portable threads implementation.
*****************************************************************************
* Copyright (C) 1999, 2002 VideoLAN
- * $Id: vlc_threads_funcs.h,v 1.11 2002/12/18 11:47:35 sam Exp $
+ * $Id: vlc_threads_funcs.h,v 1.15 2003/03/02 01:35:30 gbazin Exp $
*
* Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Samuel Hocevar <sam@via.ecp.fr>
const char * psz_error = "";
#if defined( PTH_INIT_IN_PTH_H )
- i_result = pth_mutex_acquire( &p_mutex->mutex, TRUE, NULL );
+ i_result = ( pth_mutex_acquire( &p_mutex->mutex, FALSE, NULL ) == FALSE );
#elif defined( ST_INIT_IN_ST_H )
i_result = st_mutex_lock( p_mutex->mutex );
#elif defined( UNDER_CE )
EnterCriticalSection( &p_mutex->csection );
- return 0;
+ i_result = 0;
#elif defined( WIN32 )
if( p_mutex->mutex )
{
EnterCriticalSection( &p_mutex->csection );
}
- return 0;
+ i_result = 0;
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
i_result = pthread_mutex_lock( &p_mutex->mutex );
#elif defined( HAVE_CTHREADS_H )
mutex_lock( p_mutex->mutex );
- return 0;
+ i_result = 0;
#elif defined( HAVE_KERNEL_SCHEDULER_H )
if( p_mutex == NULL )
const char * psz_error = "";
#if defined( PTH_INIT_IN_PTH_H )
- i_result = pth_mutex_release( &p_mutex->mutex );
+ i_result = ( pth_mutex_release( &p_mutex->mutex ) == FALSE );
#elif defined( ST_INIT_IN_ST_H )
i_result = st_mutex_unlock( p_mutex->mutex );
#elif defined( UNDER_CE )
LeaveCriticalSection( &p_mutex->csection );
- return 0;
+ i_result = 0;
#elif defined( WIN32 )
if( p_mutex->mutex )
{
LeaveCriticalSection( &p_mutex->csection );
}
- return 0;
+ i_result = 0;
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
i_result = pthread_mutex_unlock( &p_mutex->mutex );
#elif defined( HAVE_CTHREADS_H )
mutex_unlock( p_mutex );
- return 0;
+ i_result = 0;
#elif defined( HAVE_KERNEL_SCHEDULER_H )
if( p_mutex == NULL )
const char * psz_error = "";
#if defined( PTH_INIT_IN_PTH_H )
- i_result = pth_cond_notify( &p_condvar->cond, FALSE );
+ i_result = ( pth_cond_notify( &p_condvar->cond, FALSE ) == FALSE );
#elif defined( ST_INIT_IN_ST_H )
i_result = st_cond_signal( p_condvar->cond );
#elif defined( UNDER_CE )
PulseEvent( p_condvar->event );
- return 0;
+ i_result = 0;
#elif defined( WIN32 )
/* Release one waiting thread if one is available. */
WaitForSingleObject( p_condvar->event, INFINITE );
}
}
- return 0;
+ i_result = 0;
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
i_result = pthread_cond_signal( &p_condvar->cond );
{
cond_signal( (condition_t)p_condvar );
}
- return 0;
+ i_result = 0;
#elif defined( HAVE_KERNEL_SCHEDULER_H )
if( p_condvar == NULL )
const char * psz_error = "";
#if defined( PTH_INIT_IN_PTH_H )
- i_result = pth_cond_notify( &p_condvar->cond, FALSE );
+ i_result = ( pth_cond_notify( &p_condvar->cond, TRUE ) == FALSE );
#elif defined( ST_INIT_IN_ST_H )
i_result = st_cond_broadcast( p_condvar->cond );
{
PulseEvent( p_condvar->event );
}
- return 0;
+ i_result = 0;
#elif defined( WIN32 )
int i;
WaitForSingleObject( p_condvar->event, INFINITE );
}
}
- return 0;
+ i_result = 0;
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
i_result = pthread_cond_broadcast( &p_condvar->cond );
{
cond_signal( (condition_t)p_condvar );
}
- return 0;
+ i_result = 0;
#elif defined( HAVE_KERNEL_SCHEDULER_H )
if( p_condvar == NULL )
const char * psz_error = "";
#if defined( PTH_INIT_IN_PTH_H )
- i_result = pth_cond_await( &p_condvar->cond, &p_mutex->mutex, NULL );
+ i_result = ( pth_cond_await( &p_condvar->cond, &p_mutex->mutex, NULL )
+ == FALSE );
#elif defined( ST_INIT_IN_ST_H )
st_mutex_unlock( p_mutex->mutex );
/* Reacquire the mutex before returning. */
vlc_mutex_lock( p_mutex );
- return 0;
+ i_result = 0;
#elif defined( WIN32 )
if( !p_condvar->semaphore )
/* Reacquire the mutex before returning. */
vlc_mutex_lock( p_mutex );
- return 0;
+ i_result = 0;
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
struct timeval now;
struct timespec timeout;
- for( ; ; )
- {
- gettimeofday( &now, NULL );
- timeout.tv_sec = now.tv_sec + THREAD_COND_TIMEOUT;
- timeout.tv_nsec = now.tv_usec * 1000;
+ gettimeofday( &now, NULL );
+ timeout.tv_sec = now.tv_sec + THREAD_COND_TIMEOUT;
+ timeout.tv_nsec = now.tv_usec * 1000;
- i_result = pthread_cond_timedwait( &p_condvar->cond, &p_mutex->mutex,
- &timeout );
+ i_result = pthread_cond_timedwait( &p_condvar->cond, &p_mutex->mutex,
+ &timeout );
- if( i_result == ETIMEDOUT )
- {
- msg_Warn( p_condvar->p_this,
- "thread %d: possible deadlock detected "
- "in cond_wait at %s:%d (%s)", (int)pthread_self(),
- psz_file, i_line, strerror(i_result) );
- }
- else break;
+ if( i_result == ETIMEDOUT )
+ {
+ /* People keep pissing me off with this. --Meuuh */
+ msg_Dbg( p_condvar->p_this,
+ "thread %d: secret message triggered "
+ "at %s:%d (%s)", (int)pthread_self(),
+ psz_file, i_line, strerror(i_result) );
+
+ i_result = pthread_cond_wait( &p_condvar->cond, &p_mutex->mutex );
}
+
# else
i_result = pthread_cond_wait( &p_condvar->cond, &p_mutex->mutex );
# endif
#elif defined( HAVE_CTHREADS_H )
condition_wait( (condition_t)p_condvar, (mutex_t)p_mutex );
- return 0;
+ i_result = 0;
#elif defined( HAVE_KERNEL_SCHEDULER_H )
if( p_condvar == NULL )
p_condvar->thread = -1;
vlc_mutex_lock( p_mutex );
- return 0;
+ i_result = 0;
#endif