1 /* Cancelation. Generic version. 2 Copyright (C) 2002-2022 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, see 17 <https://www.gnu.org/licenses/>. */ 18 19 #ifndef _BITS_CANCELATION_H 20 #define _BITS_CANCELATION_H 1 21 22 struct __pthread_cancelation_handler 23 { 24 void (*__handler) (void *); 25 void *__arg; 26 struct __pthread_cancelation_handler *__next; 27 }; 28 29 /* Returns the thread local location of the cleanup handler stack. */ 30 struct __pthread_cancelation_handler **__pthread_get_cleanup_stack (void); 31 32 #define __pthread_cleanup_push(rt, rtarg) \ 33 { \ 34 struct __pthread_cancelation_handler **__handlers \ 35 = __pthread_get_cleanup_stack (); \ 36 struct __pthread_cancelation_handler __handler = \ 37 { \ 38 (rt), \ 39 (rtarg), \ 40 *__handlers \ 41 }; \ 42 *__handlers = &__handler; 43 44 #define __pthread_cleanup_pop(execute) \ 45 if (execute) \ 46 __handler.__handler (__handler.__arg); \ 47 *__handlers = __handler.__next; \ 48 } 49 50 #endif /* _BITS_CANCELATION_H */ 51