-VLC_EXPORT( void, __vlc_thread_join, ( vlc_object_t *, const char *, int ) );
-
-#define vlc_thread_ready vlc_object_signal
-
-/*****************************************************************************
- * vlc_mutex_lock: lock a mutex
- *****************************************************************************/
-#define vlc_mutex_lock( P_MUTEX ) \
- __vlc_mutex_lock( __FILE__, __LINE__, P_MUTEX )
-
-VLC_EXPORT(void, vlc_pthread_fatal, (const char *action, int error, const char *file, unsigned line));
-
-#if defined(LIBVLC_USE_PTHREAD)
-# define VLC_THREAD_ASSERT( action ) \
- if (val) \
- vlc_pthread_fatal (action, val, psz_file, i_line)
-#else
-# define VLC_THREAD_ASSERT ((void)(val))
-#endif
-
-static inline void __vlc_mutex_lock( const char * psz_file, int i_line,
- vlc_mutex_t * p_mutex )
-{
-#if defined(LIBVLC_USE_PTHREAD)
-# define vlc_assert_locked( m ) \
- assert (pthread_mutex_lock (m) == EDEADLK)
- int val = pthread_mutex_lock( p_mutex );
- VLC_THREAD_ASSERT ("locking mutex");
-
-#elif defined( UNDER_CE )
- (void)psz_file; (void)i_line;
-
- EnterCriticalSection( &p_mutex->csection );
-
-#elif defined( WIN32 )
- (void)psz_file; (void)i_line;
-
- WaitForSingleObject( *p_mutex, INFINITE );
-
-#elif defined( SYS_BEOS )
- acquire_sem( p_mutex->lock );
-
-#endif
-}
-
-#ifndef vlc_assert_locked
-# define vlc_assert_locked( m ) (void)0
-#endif
-
-/*****************************************************************************
- * vlc_mutex_unlock: unlock a mutex
- *****************************************************************************/
-#define vlc_mutex_unlock( P_MUTEX ) \
- __vlc_mutex_unlock( __FILE__, __LINE__, P_MUTEX )
-
-static inline void __vlc_mutex_unlock( const char * psz_file, int i_line,
- vlc_mutex_t *p_mutex )
-{
-#if defined(LIBVLC_USE_PTHREAD)
- int val = pthread_mutex_unlock( p_mutex );
- VLC_THREAD_ASSERT ("unlocking mutex");
-
-#elif defined( UNDER_CE )
- (void)psz_file; (void)i_line;
-
- LeaveCriticalSection( &p_mutex->csection );
-
-#elif defined( WIN32 )
- (void)psz_file; (void)i_line;
-
- ReleaseMutex( *p_mutex );
-
-#elif defined( SYS_BEOS )
- release_sem( p_mutex->lock );
-
+VLC_EXPORT( void, __vlc_thread_join, ( vlc_object_t * ) );
+
+VLC_EXPORT( int, vlc_clone, (vlc_thread_t *, void * (*) (void *), void *, int) );
+VLC_EXPORT( void, vlc_cancel, (vlc_thread_t) );
+VLC_EXPORT( void, vlc_join, (vlc_thread_t, void **) );
+VLC_EXPORT (void, vlc_control_cancel, (int cmd, ...));
+
+#ifndef LIBVLC_USE_PTHREAD_CANCEL
+enum {
+ VLC_DO_CANCEL,
+ VLC_CLEANUP_PUSH,
+ VLC_CLEANUP_POP,
+};