source: vendor/glibc-tests/2005-06-14/nptl/tst-cleanup4aux.c

Last change on this file was 2036, checked in by bird, 20 years ago

Initial revision

  • Property cvs2svn:cvs-rev set to 1.1
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 2.7 KB
Line 
1/* Copyright (C) 2003 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3 Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
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, write to the Free
17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18 02111-1307 USA. */
19
20#include <pthread.h>
21#include <stdio.h>
22#include <stdlib.h>
23#include <unistd.h>
24
25extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *__buffer,
26 void (*__routine) (void *),
27 void *__arg);
28extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *__buffer,
29 int __execute);
30
31extern void clh (void *arg);
32extern void fn0 (void);
33extern void fn1 (void);
34extern void fn5 (void);
35extern void fn7 (void);
36extern void fn9 (void);
37
38
39static __attribute__((noinline)) void
40fn3 (void)
41{
42 /* This is the old LinuxThreads pthread_cleanup_{push,pop}. */
43 struct _pthread_cleanup_buffer b;
44 _pthread_cleanup_push (&b, clh, (void *) 4l);
45
46 fn0 ();
47
48 _pthread_cleanup_pop (&b, 1);
49}
50
51
52static __attribute__((noinline)) void
53fn4 (void)
54{
55 pthread_cleanup_push (clh, (void *) 5l);
56
57 fn3 ();
58
59 pthread_cleanup_pop (1);
60}
61
62
63void
64fn5 (void)
65{
66 /* This is the old LinuxThreads pthread_cleanup_{push,pop}. */
67 struct _pthread_cleanup_buffer b;
68 _pthread_cleanup_push (&b, clh, (void *) 6l);
69
70 fn4 ();
71
72 _pthread_cleanup_pop (&b, 1);
73}
74
75
76static __attribute__((noinline)) void
77fn6 (void)
78{
79 pthread_cleanup_push (clh, (void *) 7l);
80
81 fn0 ();
82
83 pthread_cleanup_pop (1);
84}
85
86
87void
88fn7 (void)
89{
90 /* This is the old LinuxThreads pthread_cleanup_{push,pop}. */
91 struct _pthread_cleanup_buffer b;
92 _pthread_cleanup_push (&b, clh, (void *) 8l);
93
94 fn6 ();
95
96 _pthread_cleanup_pop (&b, 1);
97}
98
99
100static __attribute__((noinline)) void
101fn8 (void)
102{
103 pthread_cleanup_push (clh, (void *) 9l);
104
105 fn1 ();
106
107 pthread_cleanup_pop (1);
108}
109
110
111void
112fn9 (void)
113{
114 /* This is the old LinuxThreads pthread_cleanup_{push,pop}. */
115 struct _pthread_cleanup_buffer b;
116 _pthread_cleanup_push (&b, clh, (void *) 10l);
117
118 fn8 ();
119
120 _pthread_cleanup_pop (&b, 1);
121}
Note: See TracBrowser for help on using the repository browser.