From: RĂ©mi Denis-Courmont Date: Sat, 16 Aug 2008 08:20:48 +0000 (+0300) Subject: (Potentially) allow pthread without pthread native cancellation X-Git-Tag: 1.0.0-pre1~3754 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=0a908c0bcbf9a1991118b73540ebee8f7f8a38f8;p=vlc (Potentially) allow pthread without pthread native cancellation --- diff --git a/include/vlc_threads.h b/include/vlc_threads.h index c6be0eacdd..76bb135f0d 100644 --- a/include/vlc_threads.h +++ b/include/vlc_threads.h @@ -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 /* 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() must 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) { diff --git a/src/misc/threads.c b/src/misc/threads.c index 33a76e4759..04cba0429b 100644 --- a/src/misc/threads.c +++ b/src/misc/threads.c @@ -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