X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_threads.h;h=1f69541eb1695bd24c63c6600039c05051a9341d;hb=28c09f9f93b91c536a0d83fc0ab5280a101a5cb1;hp=316bf73f7f81d100408f5a18a0fd9ff4a272a9af;hpb=3e649d208889684211a788061134c6bc0c173b15;p=vlc diff --git a/include/vlc_threads.h b/include/vlc_threads.h index 316bf73f7f..1f69541eb1 100644 --- a/include/vlc_threads.h +++ b/include/vlc_threads.h @@ -48,8 +48,7 @@ # include /* lldiv_t definition (only in C99) */ # include /* _POSIX_SPIN_LOCKS */ # include - /* Needed for pthread_cond_timedwait */ -# include +# include # include #endif @@ -107,25 +106,21 @@ 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; +typedef pthread_rwlock_t vlc_rwlock_t; typedef pthread_key_t vlc_threadvar_t; -typedef struct vlc_timer_t vlc_timer_t; -struct vlc_timer_t -{ - timer_t handle; - void (*func) (void *); - void *data; -}; +typedef struct vlc_timer *vlc_timer_t; #elif defined( WIN32 ) +#if !defined( UNDER_CE ) +typedef HANDLE vlc_thread_t; +#else typedef struct { HANDLE handle; - void *(*entry) (void *); - void *data; -#if defined( UNDER_CE ) HANDLE cancel_event; -#endif } *vlc_thread_t; +#endif typedef struct { @@ -135,18 +130,20 @@ typedef struct #define VLC_STATIC_MUTEX { 0, } typedef HANDLE vlc_cond_t; -typedef DWORD vlc_threadvar_t; -typedef struct vlc_timer_t vlc_timer_t; -struct vlc_timer_t +typedef HANDLE vlc_sem_t; + +typedef struct { - HANDLE handle; - void (*func) (vlc_timer_t *, void *); - void *data; - unsigned overrun; - CRITICAL_SECTION serializer; - LONG volatile counter; -}; + vlc_mutex_t mutex; + vlc_cond_t read_wait; + vlc_cond_t write_wait; + unsigned long readers; + unsigned long writers; + DWORD writer; +} vlc_rwlock_t; +typedef DWORD vlc_threadvar_t; +typedef struct vlc_timer *vlc_timer_t; #endif #if defined( WIN32 ) && !defined ETIMEDOUT @@ -167,7 +164,17 @@ 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_wait, (vlc_cond_t *, vlc_mutex_t *) ); -VLC_EXPORT( int, vlc_cond_timedwait, (vlc_cond_t *, vlc_mutex_t *, mtime_t) ); +VLC_EXPORT( int, vlc_cond_timedwait, (vlc_cond_t *, vlc_mutex_t *, mtime_t) ); +VLC_EXPORT( void, vlc_sem_init, (vlc_sem_t *, unsigned) ); +VLC_EXPORT( void, vlc_sem_destroy, (vlc_sem_t *) ); +VLC_EXPORT( int, vlc_sem_post, (vlc_sem_t *) ); +VLC_EXPORT( void, vlc_sem_wait, (vlc_sem_t *) ); + +VLC_EXPORT( void, vlc_rwlock_init, (vlc_rwlock_t *) ); +VLC_EXPORT( void, vlc_rwlock_destroy, (vlc_rwlock_t *) ); +VLC_EXPORT( void, vlc_rwlock_rdlock, (vlc_rwlock_t *) ); +VLC_EXPORT( void, vlc_rwlock_wrlock, (vlc_rwlock_t *) ); +VLC_EXPORT( void, vlc_rwlock_unlock, (vlc_rwlock_t *) ); 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 *) ); @@ -182,9 +189,9 @@ VLC_EXPORT( void, vlc_join, (vlc_thread_t, void **) ); VLC_EXPORT (void, vlc_control_cancel, (int cmd, ...)); VLC_EXPORT( int, vlc_timer_create, (vlc_timer_t *, void (*) (void *), void *) LIBVLC_USED ); -VLC_EXPORT( void, vlc_timer_destroy, (vlc_timer_t *) ); -VLC_EXPORT( void, vlc_timer_schedule, (vlc_timer_t *, bool, mtime_t, mtime_t) ); -VLC_EXPORT( unsigned, vlc_timer_getoverrun, (const vlc_timer_t *) LIBVLC_USED ); +VLC_EXPORT( void, vlc_timer_destroy, (vlc_timer_t) ); +VLC_EXPORT( void, vlc_timer_schedule, (vlc_timer_t, bool, mtime_t, mtime_t) ); +VLC_EXPORT( unsigned, vlc_timer_getoverrun, (vlc_timer_t) LIBVLC_USED ); #ifndef LIBVLC_USE_PTHREAD_CANCEL enum { @@ -234,7 +241,7 @@ struct vlc_cleanup_t }; /* This macros opens a code block on purpose. This is needed for multiple - * calls within a single function. This also prevent Win32 developpers from + * calls within a single function. This also prevent Win32 developers from * writing code that would break on POSIX (POSIX opens a block as well). */ # define vlc_cleanup_push( routine, arg ) \ do { \