From: Rémi Denis-Courmont Date: Sun, 6 Jul 2008 17:55:17 +0000 (+0300) Subject: vlc_savecancel, vlc_restorecancel: POSIX cancellation state management X-Git-Tag: 1.0.0-pre1~3778 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=a332d4e1f1f833e14209989ff51009c85ea2012c;p=vlc vlc_savecancel, vlc_restorecancel: POSIX cancellation state management --- 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 *****************************************************************************/