]> git.sesse.net Git - vlc/blobdiff - include/vlc_threads.h
Cleanup vlc_timer_* prototypes
[vlc] / include / vlc_threads.h
index 316bf73f7f81d100408f5a18a0fd9ff4a272a9af..77a7608785ceb3d49c3e77dbd9eb4aeed2d7fe09 100644 (file)
@@ -107,25 +107,12 @@ 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 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 )
-typedef struct
-{
-    HANDLE handle;
-    void  *(*entry) (void *);
-    void  *data;
-#if defined( UNDER_CE )
-    HANDLE cancel_event;
-#endif
-} *vlc_thread_t;
+typedef HANDLE vlc_thread_t;
 
 typedef struct
 {
@@ -135,18 +122,19 @@ 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
@@ -168,6 +156,11 @@ 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( 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 +175,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 +227,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 { \