]> git.ipfire.org Git - thirdparty/glibc.git/blob - sysdeps/htl/bits/cancelation.h
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / htl / bits / cancelation.h
1 /* Cancelation. Generic version.
2 Copyright (C) 2002-2019 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 <http://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 */