On Linux, these functions cannot fail. On Windows, mutexes cannot fail
and neither can real condition varaibles (but we use events instead to
support pre-Vista versions). In practice, the needed resources are
allocated as part of the mutex structure and per-thread data.
In any case, basically none of the call sites for those functions were
checking for errors. It seems best to abort in case of error than to
hit undefined behaviour. We probably do not want to clutter the tree
with untested never used error paths.
/*****************************************************************************
* Function definitions
*****************************************************************************/
/*****************************************************************************
* Function definitions
*****************************************************************************/
-VLC_EXPORT( int, vlc_mutex_init, ( vlc_mutex_t * ) );
-VLC_EXPORT( int, vlc_mutex_init_recursive, ( vlc_mutex_t * ) );
+VLC_EXPORT( void, vlc_mutex_init, ( vlc_mutex_t * ) );
+VLC_EXPORT( void, vlc_mutex_init_recursive, ( vlc_mutex_t * ) );
VLC_EXPORT( void, vlc_mutex_destroy, ( vlc_mutex_t * ) );
VLC_EXPORT( void, vlc_mutex_lock, ( vlc_mutex_t * ) );
VLC_EXPORT( int, vlc_mutex_trylock, ( vlc_mutex_t * ) LIBVLC_USED );
VLC_EXPORT( void, vlc_mutex_unlock, ( vlc_mutex_t * ) );
VLC_EXPORT( void, vlc_mutex_destroy, ( vlc_mutex_t * ) );
VLC_EXPORT( void, vlc_mutex_lock, ( vlc_mutex_t * ) );
VLC_EXPORT( int, vlc_mutex_trylock, ( vlc_mutex_t * ) LIBVLC_USED );
VLC_EXPORT( void, vlc_mutex_unlock, ( vlc_mutex_t * ) );
-VLC_EXPORT( int, vlc_cond_init, ( vlc_cond_t * ) );
+VLC_EXPORT( void, vlc_cond_init, ( vlc_cond_t * ) );
VLC_EXPORT( void, vlc_cond_destroy, ( vlc_cond_t * ) );
VLC_EXPORT( void, vlc_cond_signal, (vlc_cond_t *) );
VLC_EXPORT( void, vlc_cond_broadcast, (vlc_cond_t *) );
VLC_EXPORT( void, vlc_cond_destroy, ( vlc_cond_t * ) );
VLC_EXPORT( void, vlc_cond_signal, (vlc_cond_t *) );
VLC_EXPORT( void, vlc_cond_broadcast, (vlc_cond_t *) );
/**
* Initializes a spinlock.
*/
/**
* Initializes a spinlock.
*/
-static inline int vlc_spin_init (vlc_spinlock_t *spin)
+static inline void vlc_spin_init (vlc_spinlock_t *spin)
- return pthread_spin_init (spin, PTHREAD_PROCESS_PRIVATE);
+ if (pthread_spin_init (spin, PTHREAD_PROCESS_PRIVATE))
+ abort ();
/**
* Initializes a spinlock.
*/
/**
* Initializes a spinlock.
*/
-static inline int vlc_spin_init (vlc_spinlock_t *spin)
+static inline void vlc_spin_init (vlc_spinlock_t *spin)
- return !InitializeCriticalSectionAndSpinCount(spin, 4000);
+ if (!InitializeCriticalSectionAndSpinCount(spin, 4000))
+ abort ();
/* Fallback to plain mutexes if spinlocks are not available */
typedef vlc_mutex_t vlc_spinlock_t;
/* Fallback to plain mutexes if spinlocks are not available */
typedef vlc_mutex_t vlc_spinlock_t;
-static inline int vlc_spin_init (vlc_spinlock_t *spin)
+static inline void vlc_spin_init (vlc_spinlock_t *spin)
- return vlc_mutex_init (spin);
}
# define vlc_spin_lock vlc_mutex_lock
}
# define vlc_spin_lock vlc_mutex_lock
/*****************************************************************************
* vlc_mutex_init: initialize a mutex
*****************************************************************************/
/*****************************************************************************
* vlc_mutex_init: initialize a mutex
*****************************************************************************/
-int vlc_mutex_init( vlc_mutex_t *p_mutex )
+void vlc_mutex_init( vlc_mutex_t *p_mutex )
{
pthread_mutexattr_t attr;
{
pthread_mutexattr_t attr;
- int i_result;
-
- pthread_mutexattr_init( &attr );
+ if( pthread_mutexattr_init( &attr ) )
+ abort();
#ifndef NDEBUG
/* Create error-checking mutex to detect problems more easily. */
# if defined (__GLIBC__) && (__GLIBC_MINOR__ < 6)
#ifndef NDEBUG
/* Create error-checking mutex to detect problems more easily. */
# if defined (__GLIBC__) && (__GLIBC_MINOR__ < 6)
pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_ERRORCHECK );
# endif
#endif
pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_ERRORCHECK );
# endif
#endif
- i_result = pthread_mutex_init( p_mutex, &attr );
+ if( pthread_mutex_init( p_mutex, &attr ) )
+ abort();
pthread_mutexattr_destroy( &attr );
pthread_mutexattr_destroy( &attr );
}
/*****************************************************************************
* vlc_mutex_init: initialize a recursive mutex (Do not use)
*****************************************************************************/
}
/*****************************************************************************
* vlc_mutex_init: initialize a recursive mutex (Do not use)
*****************************************************************************/
-int vlc_mutex_init_recursive( vlc_mutex_t *p_mutex )
+void vlc_mutex_init_recursive( vlc_mutex_t *p_mutex )
{
pthread_mutexattr_t attr;
{
pthread_mutexattr_t attr;
pthread_mutexattr_init( &attr );
#if defined (__GLIBC__) && (__GLIBC_MINOR__ < 6)
pthread_mutexattr_init( &attr );
#if defined (__GLIBC__) && (__GLIBC_MINOR__ < 6)
#else
pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_RECURSIVE );
#endif
#else
pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_RECURSIVE );
#endif
- i_result = pthread_mutex_init( p_mutex, &attr );
+ if( pthread_mutex_init( p_mutex, &attr ) )
+ abort();
pthread_mutexattr_destroy( &attr );
pthread_mutexattr_destroy( &attr );
/*****************************************************************************
* vlc_cond_init: initialize a condition variable
*****************************************************************************/
/*****************************************************************************
* vlc_cond_init: initialize a condition variable
*****************************************************************************/
-int vlc_cond_init( vlc_cond_t *p_condvar )
+void vlc_cond_init( vlc_cond_t *p_condvar )
{
pthread_condattr_t attr;
{
pthread_condattr_t attr;
- int ret;
-
- ret = pthread_condattr_init (&attr);
- if (ret)
- return ret;
+ if (pthread_condattr_init (&attr))
+ abort ();
#if !defined (_POSIX_CLOCK_SELECTION)
/* Fairly outdated POSIX support (that was defined in 2001) */
# define _POSIX_CLOCK_SELECTION (-1)
#if !defined (_POSIX_CLOCK_SELECTION)
/* Fairly outdated POSIX support (that was defined in 2001) */
# define _POSIX_CLOCK_SELECTION (-1)
pthread_condattr_setclock (&attr, CLOCK_MONOTONIC);
#endif
pthread_condattr_setclock (&attr, CLOCK_MONOTONIC);
#endif
- ret = pthread_cond_init (p_condvar, &attr);
+ if (pthread_cond_init (p_condvar, &attr))
+ abort ();
pthread_condattr_destroy (&attr);
pthread_condattr_destroy (&attr);
-int vlc_mutex_init( vlc_mutex_t *p_mutex )
+void vlc_mutex_init( vlc_mutex_t *p_mutex )
{
/* This creates a recursive mutex. This is OK as fast mutexes have
* no defined behavior in case of recursive locking. */
{
/* This creates a recursive mutex. This is OK as fast mutexes have
* no defined behavior in case of recursive locking. */
-int vlc_mutex_init_recursive( vlc_mutex_t *p_mutex )
+void vlc_mutex_init_recursive( vlc_mutex_t *p_mutex )
{
InitializeCriticalSection( &p_mutex->mutex );
p_mutex->initialized = 1;
{
InitializeCriticalSection( &p_mutex->mutex );
p_mutex->initialized = 1;
}
/*** Condition variables ***/
}
/*** Condition variables ***/
-int vlc_cond_init( vlc_cond_t *p_condvar )
+void vlc_cond_init( vlc_cond_t *p_condvar )
{
/* Create a manual-reset event (manual reset is needed for broadcast). */
*p_condvar = CreateEvent (NULL, TRUE, FALSE, NULL);
{
/* Create a manual-reset event (manual reset is needed for broadcast). */
*p_condvar = CreateEvent (NULL, TRUE, FALSE, NULL);
- return *p_condvar ? 0 : ENOMEM;
+ if (!*p_condvar)
+ abort();
}
void vlc_cond_destroy (vlc_cond_t *p_condvar)
}
void vlc_cond_destroy (vlc_cond_t *p_condvar)