[vlc-devel] commit: (Potentially) allow pthread without pthread native cancellation ( Rémi Denis-Courmont )
git version control
git at videolan.org
Wed Aug 27 22:57:34 CEST 2008
vlc | branch: master | Rémi Denis-Courmont <rdenis at simphalempin.com> | Sat Aug 16 11:20:48 2008 +0300| [0a908c0bcbf9a1991118b73540ebee8f7f8a38f8] | committer: Rémi Denis-Courmont
(Potentially) allow pthread without pthread native cancellation
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0a908c0bcbf9a1991118b73540ebee8f7f8a38f8
---
include/vlc_threads.h | 13 +++++++------
src/misc/threads.c | 10 ++++++----
2 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/include/vlc_threads.h b/include/vlc_threads.h
index c6be0ea..76bb135 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 <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)
{
diff --git a/src/misc/threads.c b/src/misc/threads.c
index 33a76e4..04cba04 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
More information about the vlc-devel
mailing list