]> git.sesse.net Git - vlc/blobdiff - include/vlc_threads.h
contrib: add opus 0.9.14
[vlc] / include / vlc_threads.h
index 0575523a1141c65c645e5a489554fe259a68bd78..ebf94e25a9c5723541a91d65f3436661ec172e42 100644 (file)
@@ -2,7 +2,7 @@
  * vlc_threads.h : threads implementation for the VideoLAN client
  * This header provides portable declarations for mutexes & conditions
  *****************************************************************************
- * Copyright (C) 1999, 2002 the VideoLAN team
+ * Copyright (C) 1999, 2002 VLC authors and VideoLAN
  * Copyright © 2007-2008 Rémi Denis-Courmont
  *
  * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
  *          Gildas Bazin <gbazin@netcourrier.com>
  *          Christophe Massiot <massiot@via.ecp.fr>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
  *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
 #ifndef VLC_THREADS_H_
@@ -166,11 +166,10 @@ typedef struct
     vlc_mutex_t   mutex;
     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 }
+    { VLC_STATIC_MUTEX, VLC_STATIC_COND, 0, 0 }
 
 typedef struct vlc_threadvar *vlc_threadvar_t;
 typedef struct vlc_timer *vlc_timer_t;
@@ -215,11 +214,10 @@ 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 }
+    { VLC_STATIC_MUTEX, VLC_STATIC_COND, 0, 0 }
 
 typedef struct vlc_threadvar *vlc_threadvar_t;
 typedef struct vlc_timer *vlc_timer_t;
@@ -396,6 +394,24 @@ struct vlc_cleanup_t
         vlc_cleanup_data.proc (vlc_cleanup_data.data); \
     } while (0)
 
+/* poll() with cancellation */
+static inline int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout)
+{
+    vlc_testcancel ();
+
+    while (timeout > 50)
+    {
+        int val = poll (fds, nfds, timeout);
+        if (val != 0)
+            return val;
+        timeout -= 50;
+        vlc_testcancel ();
+    }
+
+    return poll (fds, nfds, timeout);
+}
+# define poll(u,n,t) vlc_poll(u, n, t)
+
 #endif /* LIBVLC_USE_PTHREAD_CANCEL */
 
 static inline void vlc_cleanup_lock (void *lock)