]> git.sesse.net Git - vlc/commitdiff
(Potentially) allow pthread without pthread native cancellation
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Sat, 16 Aug 2008 08:20:48 +0000 (11:20 +0300)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Wed, 27 Aug 2008 19:43:12 +0000 (22:43 +0300)
include/vlc_threads.h
src/misc/threads.c

index c6be0eacddb1e3f8db17d66149b309e01c37e5b1..76bb135f0daf0890d4c967886182ae9b4a682151 100644 (file)
@@ -47,6 +47,7 @@
 
 #else                                         /* pthreads (like Linux & BSD) */
 #   define LIBVLC_USE_PTHREAD 1
+#   define LIBVLC_USE_PTHREAD_CANCEL 1
 #   define _APPLE_C_SOURCE    1 /* Proper pthread semantics on OSX */
 
 #   include <stdlib.h> /* lldiv_t definition (only in C99) */
@@ -181,7 +182,7 @@ VLC_EXPORT( void, vlc_cancel, (vlc_thread_t) );
 VLC_EXPORT( int, vlc_join, (vlc_thread_t, void **) );
 VLC_EXPORT (void, vlc_control_cancel, (int cmd, ...));
 
-#ifndef LIBVLC_USE_PTHREAD
+#ifndef LIBVLC_USE_PTHREAD_CANCEL
 enum {
     VLC_SAVE_CANCEL,
     VLC_RESTORE_CANCEL,
@@ -283,7 +284,7 @@ static inline void __vlc_mutex_unlock( const char * psz_file, int i_line,
 static inline int vlc_savecancel (void)
 {
     int state;
-#if defined (LIBVLC_USE_PTHREAD)
+#if defined (LIBVLC_USE_PTHREAD_CANCEL)
     (void) pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &state);
 #else
     vlc_control_cancel (VLC_SAVE_CANCEL, &state);
@@ -298,7 +299,7 @@ static inline int vlc_savecancel (void)
  */
 static inline void vlc_restorecancel (int state)
 {
-#if defined (LIBVLC_USE_PTHREAD)
+#if defined (LIBVLC_USE_PTHREAD_CANCEL)
     (void) pthread_setcancelstate (state, NULL);
 #else
     vlc_control_cancel (VLC_RESTORE_CANCEL, state);
@@ -312,14 +313,14 @@ static inline void vlc_restorecancel (int state)
  */
 static inline void vlc_testcancel (void)
 {
-#if defined (LIBVLC_USE_PTHREAD)
+#if defined (LIBVLC_USE_PTHREAD_CANCEL)
     pthread_testcancel ();
 #else
     vlc_control_cancel (VLC_TEST_CANCEL);
 #endif
 }
 
-#if defined (LIBVLC_USE_PTHREAD)
+#if defined (LIBVLC_USE_PTHREAD_CANCEL)
 /**
  * Registers a new procedure to run if the thread is cancelled (or otherwise
  * exits prematurely). Any call to vlc_cleanup_push() <b>must</b> paired with a
@@ -371,7 +372,7 @@ struct vlc_cleanup_t
         vlc_cleanup_data.proc (vlc_cleanup_data.data); \
     } while (0)
 
-#endif /* LIBVLC_USE_PTHREAD */
+#endif /* LIBVLC_USE_PTHREAD_CANCEL */
 
 static inline void vlc_cleanup_lock (void *lock)
 {
index 33a76e4759deb1dfa4e3482d62e1c5d6ec17332d..04cba0429b7543a3a65ffe44379f709a6f40ceb9 100644 (file)
@@ -180,7 +180,7 @@ int vlc_threads_init( void )
         vlc_threadvar_create( &thread_object_key, NULL );
 #endif
         vlc_threadvar_create( &msg_context_global_key, msg_StackDestroy );
-#ifndef LIBVLC_USE_PTHREAD
+#ifndef LIBVLC_USE_PTHREAD_CANCEL
         vlc_threadvar_create( &cancel_key, free );
 #endif
     }
@@ -586,10 +586,12 @@ static void CALLBACK vlc_cancel_self (ULONG_PTR dummy)
  */
 void vlc_cancel (vlc_thread_t thread_id)
 {
-#if defined (LIBVLC_USE_PTHREAD)
+#if defined (LIBVLC_USE_PTHREAD_CANCEL)
     pthread_cancel (thread_id);
 #elif defined (WIN32)
     QueueUserAPC (vlc_cancel_self, thread_id->handle, 0);
+#else
+#   warning vlc_cancel is not implemented!
 #endif
 }
 
@@ -864,7 +866,7 @@ void vlc_thread_cancel (vlc_object_t *obj)
         vlc_cancel (priv->thread_id);
 }
 
-#ifndef LIBVLC_USE_PTHREAD
+#ifndef LIBVLC_USE_PTHREAD_CANCEL
 typedef struct vlc_cancel_t
 {
     vlc_cleanup_t *cleaners;
@@ -877,7 +879,7 @@ void vlc_control_cancel (int cmd, ...)
 {
     /* NOTE: This function only modifies thread-specific data, so there is no
      * need to lock anything. */
-#ifdef LIBVLC_USE_PTHREAD
+#ifdef LIBVLC_USE_PTHREAD_CANCEL
     (void) cmd;
     assert (0);
 #else