From a332d4e1f1f833e14209989ff51009c85ea2012c Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sun, 6 Jul 2008 20:55:17 +0300 Subject: [PATCH] vlc_savecancel, vlc_restorecancel: POSIX cancellation state management --- include/vlc_threads.h | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/include/vlc_threads.h b/include/vlc_threads.h index 748f15edb0..6ce24237ae 100644 --- a/include/vlc_threads.h +++ b/include/vlc_threads.h @@ -3,7 +3,7 @@ * This header provides portable declarations for mutexes & conditions ***************************************************************************** * Copyright (C) 1999, 2002 the VideoLAN team - * $Id$ + * Copyright © 2007-2008 Rémi Denis-Courmont * * Authors: Jean-Marc Dressler * Samuel Hocevar @@ -588,6 +588,32 @@ static inline void barrier (void) #endif } +/** + * Save the cancellation state and disable cancellation for the calling thread. + * This function must be called before entering a piece of code that is not + * cancellation-safe. + * @param p_state storage for the previous cancellation state + * @return Nothing, always succeeds. + */ +static inline void vlc_savecancel (int *p_state) +{ +#if defined (LIBVLC_USE_PTHREAD) + (void) pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, p_state); +#endif +} + +/** + * Restore the cancellation state for the calling thread. + * @param state previous state as returned by vlc_savecancel(). + * @return Nothing, always succeeds. + */ +static inline void vlc_restorecancel (int state) +{ +#if defined (LIBVLC_USE_PTHREAD) + (void) pthread_setcancelstate (state, NULL); +#endif +} + /***************************************************************************** * vlc_thread_create: create a thread *****************************************************************************/ -- 2.39.2