]> git.sesse.net Git - vlc/blobdiff - include/vlc_threads.h
Fix spelling: an URL -> a URL
[vlc] / include / vlc_threads.h
index da892ac70997529b489bd9a4d1cccb2c847f1703..d7b6b8a3c78b379874ed76a29aab47c7f1addf8f 100644 (file)
  */
 
 #if defined( UNDER_CE )
-#   include <errno.h>                                           /* WinCE API */
 #elif defined( WIN32 )
 #   include <process.h>                                         /* Win32 API */
-#   include <errno.h>
 
 #else                                         /* pthreads (like Linux & BSD) */
 #   define LIBVLC_USE_PTHREAD 1
 #   define LIBVLC_USE_PTHREAD_CANCEL 1
 #   define _APPLE_C_SOURCE    1 /* Proper pthread semantics on OSX */
 
-#   include <stdlib.h> /* lldiv_t definition (only in C99) */
 #   include <unistd.h> /* _POSIX_SPIN_LOCKS */
 #   include <pthread.h>
-#   include <semaphore.h>
-#   include <time.h>
+
+/* Unnamed POSIX semaphores not supported on Mac OS X, use Mach semaphores instead */
+#   if defined (__APPLE__)
+#      include <mach/semaphore.h>
+#      include <mach/task.h>
+#   else
+#      include <semaphore.h>
+#   endif
 
 #endif
 
@@ -106,22 +109,20 @@ typedef pthread_t       vlc_thread_t;
 typedef pthread_mutex_t vlc_mutex_t;
 #define VLC_STATIC_MUTEX PTHREAD_MUTEX_INITIALIZER
 typedef pthread_cond_t  vlc_cond_t;
-typedef sem_t           vlc_sem_t;
+#define VLC_STATIC_COND  PTHREAD_COND_INITIALIZER
 typedef pthread_rwlock_t vlc_rwlock_t;
 typedef pthread_key_t   vlc_threadvar_t;
 typedef struct vlc_timer *vlc_timer_t;
 
-#elif defined( WIN32 )
-#if !defined( UNDER_CE )
-typedef HANDLE vlc_thread_t;
+#if defined (__APPLE__)
+typedef semaphore_t     vlc_sem_t;
 #else
-typedef struct
-{
-    HANDLE handle;
-    HANDLE cancel_event;
-} *vlc_thread_t;
+typedef sem_t           vlc_sem_t;
 #endif
 
+#elif defined( WIN32 )
+typedef struct vlc_thread *vlc_thread_t;
+
 typedef struct
 {
     bool dynamic;
@@ -137,7 +138,12 @@ typedef struct
 } vlc_mutex_t;
 #define VLC_STATIC_MUTEX { false, { { false, 0 } } }
 
-typedef HANDLE  vlc_cond_t;
+typedef struct
+{
+    HANDLE   handle;
+    unsigned clock;
+} vlc_cond_t;
+
 typedef HANDLE  vlc_sem_t;
 
 typedef struct
@@ -150,7 +156,7 @@ typedef struct
     DWORD         writer;
 } vlc_rwlock_t;
 
-typedef DWORD   vlc_threadvar_t;
+typedef struct vlc_threadvar *vlc_threadvar_t;
 typedef struct vlc_timer *vlc_timer_t;
 #endif
 
@@ -168,6 +174,7 @@ 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_cond_init,     ( vlc_cond_t * ) );
+VLC_EXPORT( void, vlc_cond_init_daytime, ( 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 *) );
@@ -187,9 +194,9 @@ VLC_EXPORT( int, vlc_threadvar_create, (vlc_threadvar_t * , void (*) (void *) )
 VLC_EXPORT( void, vlc_threadvar_delete, (vlc_threadvar_t *) );
 VLC_EXPORT( int, vlc_threadvar_set, (vlc_threadvar_t, void *) );
 VLC_EXPORT( void *, vlc_threadvar_get, (vlc_threadvar_t) );
-VLC_EXPORT( int,  vlc_thread_create, ( vlc_object_t *, const char *, int, const char *, void * ( * ) ( vlc_object_t * ), int ) LIBVLC_USED );
-VLC_EXPORT( int,  __vlc_thread_set_priority, ( vlc_object_t *, const char *, int, int ) );
-VLC_EXPORT( void, __vlc_thread_join,   ( vlc_object_t * ) );
+VLC_EXPORT( int,  vlc_thread_create, ( vlc_object_t *, void * ( * ) ( vlc_object_t * ), int ) LIBVLC_USED LIBVLC_DEPRECATED );
+VLC_EXPORT( int,  vlc_thread_set_priority, ( vlc_object_t *, int ) LIBVLC_DEPRECATED );
+VLC_EXPORT( void, vlc_thread_join,   ( vlc_object_t * ) LIBVLC_DEPRECATED );
 
 VLC_EXPORT( int, vlc_clone, (vlc_thread_t *, void * (*) (void *), void *, int) LIBVLC_USED );
 VLC_EXPORT( void, vlc_cancel, (vlc_thread_t) );
@@ -203,7 +210,6 @@ VLC_EXPORT( unsigned, vlc_timer_getoverrun, (vlc_timer_t) LIBVLC_USED );
 
 #ifndef LIBVLC_USE_PTHREAD_CANCEL
 enum {
-    VLC_DO_CANCEL,
     VLC_CLEANUP_PUSH,
     VLC_CLEANUP_POP,
 };
@@ -387,23 +393,14 @@ static inline void barrier (void)
 #endif
 }
 
-/*****************************************************************************
- * vlc_thread_create: create a thread
- *****************************************************************************/
-#define vlc_thread_create( P_THIS, PSZ_NAME, FUNC, PRIORITY )         \
-    vlc_thread_create( VLC_OBJECT(P_THIS), __FILE__, __LINE__, PSZ_NAME, FUNC, PRIORITY )
+#define vlc_thread_create( P_THIS, FUNC, PRIORITY ) \
+    vlc_thread_create( VLC_OBJECT(P_THIS), FUNC, PRIORITY )
 
-/*****************************************************************************
- * vlc_thread_set_priority: set the priority of the calling thread
- *****************************************************************************/
 #define vlc_thread_set_priority( P_THIS, PRIORITY )                         \
-    __vlc_thread_set_priority( VLC_OBJECT(P_THIS), __FILE__, __LINE__, PRIORITY )
+    vlc_thread_set_priority( VLC_OBJECT(P_THIS), PRIORITY )
 
-/*****************************************************************************
- * vlc_thread_join: wait until a thread exits
- *****************************************************************************/
 #define vlc_thread_join( P_THIS )                                           \
-    __vlc_thread_join( VLC_OBJECT(P_THIS) )
+    vlc_thread_join( VLC_OBJECT(P_THIS) )
 
 #ifdef __cplusplus
 /**
@@ -428,4 +425,16 @@ class vlc_mutex_locker
 };
 #endif
 
+enum {
+   VLC_AVCODEC_MUTEX = 0,
+   VLC_GCRYPT_MUTEX,
+   VLC_XLIB_MUTEX,
+   /* Insert new entry HERE */
+   VLC_MAX_MUTEX
+};
+
+VLC_EXPORT( void, vlc_global_mutex, ( unsigned, bool ) );
+#define vlc_global_lock( n ) vlc_global_mutex( n, true )
+#define vlc_global_unlock( n ) vlc_global_mutex( n, false )
+
 #endif /* !_VLC_THREADS_H */