X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_threads.h;h=0575523a1141c65c645e5a489554fe259a68bd78;hb=ccd35a73693c217f189806d2778b01ed41dce142;hp=f7a91a8f8b99e80da37d7e85347c084148d01c64;hpb=9fd4a6a6ba45023d54cd2573e0842170fdfc1d94;p=vlc diff --git a/include/vlc_threads.h b/include/vlc_threads.h index f7a91a8f8b..0575523a11 100644 --- a/include/vlc_threads.h +++ b/include/vlc_threads.h @@ -38,6 +38,11 @@ #elif defined( WIN32 ) # include /* Win32 API */ +#elif defined( __OS2__ ) /* OS/2 API */ +# include + +# define pthread_sigmask sigprocmask + #else /* pthreads (like Linux & BSD) */ # define LIBVLC_USE_PTHREAD 1 # define LIBVLC_USE_PTHREAD_CANCEL 1 @@ -90,6 +95,14 @@ # define VLC_THREAD_PRIORITY_HIGHEST \ THREAD_PRIORITY_TIME_CRITICAL +#elif defined(__OS2__) +# define VLC_THREAD_PRIORITY_LOW 0 +# define VLC_THREAD_PRIORITY_INPUT MAKESHORT( PRTYD_MAXIMUM / 2, PRTYC_REGULAR ) +# define VLC_THREAD_PRIORITY_AUDIO MAKESHORT( PRTYD_MAXIMUM, PRTYC_REGULAR ) +# define VLC_THREAD_PRIORITY_VIDEO 0 +# define VLC_THREAD_PRIORITY_OUTPUT MAKESHORT( PRTYD_MAXIMUM / 2, PRTYC_REGULAR ) +# define VLC_THREAD_PRIORITY_HIGHEST MAKESHORT( 0, PRTYC_TIMECRITICAL ) + #else # define VLC_THREAD_PRIORITY_LOW 0 # define VLC_THREAD_PRIORITY_INPUT 0 @@ -111,6 +124,7 @@ typedef pthread_mutex_t vlc_mutex_t; typedef pthread_cond_t vlc_cond_t; #define VLC_STATIC_COND PTHREAD_COND_INITIALIZER typedef pthread_rwlock_t vlc_rwlock_t; +#define VLC_STATIC_RWLOCK PTHREAD_RWLOCK_INITIALIZER typedef pthread_key_t vlc_threadvar_t; typedef struct vlc_timer *vlc_timer_t; @@ -143,21 +157,73 @@ typedef struct HANDLE handle; unsigned clock; } vlc_cond_t; +#define VLC_STATIC_COND { 0, 0 } typedef HANDLE vlc_sem_t; typedef struct { vlc_mutex_t mutex; - vlc_cond_t read_wait; - vlc_cond_t write_wait; + vlc_cond_t wait; unsigned long readers; unsigned long writers; DWORD writer; } vlc_rwlock_t; +#define VLC_STATIC_RWLOCK \ + { VLC_STATIC_MUTEX, VLC_STATIC_COND, 0, 0, 0 } + +typedef struct vlc_threadvar *vlc_threadvar_t; +typedef struct vlc_timer *vlc_timer_t; + +#elif defined( __OS2__ ) +typedef struct vlc_thread *vlc_thread_t; + +typedef struct +{ + bool dynamic; + union + { + struct + { + bool locked; + unsigned long contention; + }; + HMTX hmtx; + }; +} vlc_mutex_t; + +#define VLC_STATIC_MUTEX { false, { { false, 0 } } } + +typedef struct +{ + HEV hev; + unsigned clock; +} vlc_cond_t; + +#define VLC_STATIC_COND { 0, 0 } + +typedef struct +{ + HEV hev; + HMTX wait_mutex; + HMTX count_mutex; + int count; +} vlc_sem_t; + +typedef struct +{ + vlc_mutex_t mutex; + vlc_cond_t wait; + unsigned long readers; + unsigned long writers; + int writer; +} vlc_rwlock_t; +#define VLC_STATIC_RWLOCK \ + { VLC_STATIC_MUTEX, VLC_STATIC_COND, 0, 0, 0 } typedef struct vlc_threadvar *vlc_threadvar_t; typedef struct vlc_timer *vlc_timer_t; + #endif #if defined( WIN32 ) && !defined ETIMEDOUT