typedef pthread_mutex_t vlc_mutex_t;
#define VLC_STATIC_MUTEX PTHREAD_MUTEX_INITIALIZER
typedef pthread_cond_t vlc_cond_t;
+typedef pthread_rwlock_t vlc_rwlock_t;
typedef pthread_key_t vlc_threadvar_t;
-typedef struct vlc_timer_t vlc_timer_t;
-
-#ifndef __APPLE__
-/* There is no POSIX timer on Mac OS X. Move that to configure eventually. */
-#define HAVE_POSIX_TIMER 1
-#endif
-
-struct vlc_timer_t
-{
-#ifdef HAVE_POSIX_TIMER
- timer_t handle;
-#endif
- 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
{
#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 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
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( 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 *) );
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 {
};
/* 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 { \