hurd: Bump remaining LGPL2+ htl licences to LGPL 2.1+
[glibc.git] / sysdeps / htl / bits / cancelation.h
blob436dfcbbfa67327f6ed5333c470e614e90ee7068
1 /* Cancelation. Generic version.
2 Copyright (C) 2002-2018 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
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.
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.
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 <http://www.gnu.org/licenses/>. */
19 #ifndef _BITS_CANCELATION_H
20 #define _BITS_CANCELATION_H 1
22 struct __pthread_cancelation_handler
24 void (*__handler) (void *);
25 void *__arg;
26 struct __pthread_cancelation_handler *__next;
29 /* Returns the thread local location of the cleanup handler stack. */
30 struct __pthread_cancelation_handler **__pthread_get_cleanup_stack (void);
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;
44 #define __pthread_cleanup_pop(execute) \
45 if (execute) \
46 __handler.__handler (__handler.__arg); \
47 *__handlers = __handler.__next; \
50 #endif /* _BITS_CANCELATION_H */