pthread_cancelstub.c revision 1.24.2.2 1 1.24.2.2 christos /* $NetBSD: pthread_cancelstub.c,v 1.24.2.2 2008/12/29 15:10:58 christos Exp $ */
2 1.24.2.2 christos
3 1.24.2.2 christos /*-
4 1.24.2.2 christos * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc.
5 1.24.2.2 christos * All rights reserved.
6 1.24.2.2 christos *
7 1.24.2.2 christos * This code is derived from software contributed to The NetBSD Foundation
8 1.24.2.2 christos * by Nathan J. Williams and Andrew Doran.
9 1.24.2.2 christos *
10 1.24.2.2 christos * Redistribution and use in source and binary forms, with or without
11 1.24.2.2 christos * modification, are permitted provided that the following conditions
12 1.24.2.2 christos * are met:
13 1.24.2.2 christos * 1. Redistributions of source code must retain the above copyright
14 1.24.2.2 christos * notice, this list of conditions and the following disclaimer.
15 1.24.2.2 christos * 2. Redistributions in binary form must reproduce the above copyright
16 1.24.2.2 christos * notice, this list of conditions and the following disclaimer in the
17 1.24.2.2 christos * documentation and/or other materials provided with the distribution.
18 1.24.2.2 christos *
19 1.24.2.2 christos * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 1.24.2.2 christos * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 1.24.2.2 christos * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 1.24.2.2 christos * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 1.24.2.2 christos * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 1.24.2.2 christos * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 1.24.2.2 christos * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 1.24.2.2 christos * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 1.24.2.2 christos * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 1.24.2.2 christos * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 1.24.2.2 christos * POSSIBILITY OF SUCH DAMAGE.
30 1.24.2.2 christos */
31 1.24.2.2 christos
32 1.24.2.2 christos #include <sys/cdefs.h>
33 1.24.2.2 christos __RCSID("$NetBSD: pthread_cancelstub.c,v 1.24.2.2 2008/12/29 15:10:58 christos Exp $");
34 1.24.2.2 christos
35 1.24.2.2 christos #ifndef lint
36 1.24.2.2 christos
37 1.24.2.2 christos
38 1.24.2.2 christos /*
39 1.24.2.2 christos * This is necessary because the names are always weak (they are not
40 1.24.2.2 christos * POSIX functions).
41 1.24.2.2 christos */
42 1.24.2.2 christos #define fsync_range _fsync_range
43 1.24.2.2 christos #define pollts _pollts
44 1.24.2.2 christos
45 1.24.2.2 christos /*
46 1.24.2.2 christos * XXX this is necessary to get the prototypes for the __sigsuspend14
47 1.24.2.2 christos * XXX and __msync13 internal names, instead of the application-visible
48 1.24.2.2 christos * XXX sigsuspend and msync names. It's kind of gross, but we're pretty
49 1.24.2.2 christos * XXX intimate with libc already.
50 1.24.2.2 christos */
51 1.24.2.2 christos #define __LIBC12_SOURCE__
52 1.24.2.2 christos
53 1.24.2.2 christos #include <sys/msg.h>
54 1.24.2.2 christos #include <sys/types.h>
55 1.24.2.2 christos #include <sys/uio.h>
56 1.24.2.2 christos #include <sys/wait.h>
57 1.24.2.2 christos #include <aio.h>
58 1.24.2.2 christos #include <fcntl.h>
59 1.24.2.2 christos #include <mqueue.h>
60 1.24.2.2 christos #include <poll.h>
61 1.24.2.2 christos #include <stdarg.h>
62 1.24.2.2 christos #include <unistd.h>
63 1.24.2.2 christos
64 1.24.2.2 christos #include <signal.h>
65 1.24.2.2 christos #include <sys/mman.h>
66 1.24.2.2 christos #include <sys/select.h>
67 1.24.2.2 christos #include <sys/socket.h>
68 1.24.2.2 christos
69 1.24.2.2 christos #include <compat/sys/mman.h>
70 1.24.2.2 christos #include <compat/sys/poll.h>
71 1.24.2.2 christos #include <compat/sys/select.h>
72 1.24.2.2 christos #include <compat/sys/wait.h>
73 1.24.2.2 christos #include <compat/include/mqueue.h>
74 1.24.2.2 christos #include <compat/include/signal.h>
75 1.24.2.2 christos
76 1.24.2.2 christos #include "pthread.h"
77 1.24.2.2 christos #include "pthread_int.h"
78 1.24.2.2 christos
79 1.24.2.2 christos int pthread__cancel_stub_binder;
80 1.24.2.2 christos
81 1.24.2.2 christos int _sys_accept(int, struct sockaddr *, socklen_t *);
82 1.24.2.2 christos int _sys___aio_suspend50(const struct aiocb * const [], int,
83 1.24.2.2 christos const struct timespec *);
84 1.24.2.2 christos int __aio_suspend50(const struct aiocb * const [], int,
85 1.24.2.2 christos const struct timespec *);
86 1.24.2.2 christos int _sys_close(int);
87 1.24.2.2 christos int _sys_connect(int, const struct sockaddr *, socklen_t);
88 1.24.2.2 christos int _sys_fcntl(int, int, ...);
89 1.24.2.2 christos int _sys_fdatasync(int);
90 1.24.2.2 christos int _sys_fsync(int);
91 1.24.2.2 christos int _sys_fsync_range(int, int, off_t, off_t);
92 1.24.2.2 christos int _sys_mq_send(mqd_t, const char *, size_t, unsigned);
93 1.24.2.2 christos ssize_t _sys_mq_receive(mqd_t, char *, size_t, unsigned *);
94 1.24.2.2 christos int _sys___mq_timedsend50(mqd_t, const char *, size_t, unsigned,
95 1.24.2.2 christos const struct timespec *);
96 1.24.2.2 christos ssize_t _sys___mq_timedreceive50(mqd_t, char *, size_t, unsigned *,
97 1.24.2.2 christos const struct timespec *);
98 1.24.2.2 christos ssize_t _sys_msgrcv(int, void *, size_t, long, int);
99 1.24.2.2 christos int _sys_msgsnd(int, const void *, size_t, int);
100 1.24.2.2 christos int _sys___msync13(void *, size_t, int);
101 1.24.2.2 christos int _sys_open(const char *, int, ...);
102 1.24.2.2 christos int _sys_poll(struct pollfd *, nfds_t, int);
103 1.24.2.2 christos int _sys___pollts50(struct pollfd *, nfds_t, const struct timespec *,
104 1.24.2.2 christos const sigset_t *);
105 1.24.2.2 christos ssize_t _sys_pread(int, void *, size_t, off_t);
106 1.24.2.2 christos int _sys___pselect50(int, fd_set *, fd_set *, fd_set *,
107 1.24.2.2 christos const struct timespec *, const sigset_t *);
108 1.24.2.2 christos ssize_t _sys_pwrite(int, const void *, size_t, off_t);
109 1.24.2.2 christos ssize_t _sys_read(int, void *, size_t);
110 1.24.2.2 christos ssize_t _sys_readv(int, const struct iovec *, int);
111 1.24.2.2 christos int _sys___select50(int, fd_set *, fd_set *, fd_set *, struct timeval *);
112 1.24.2.2 christos int _sys___wait450(pid_t, int *, int, struct rusage *);
113 1.24.2.2 christos ssize_t _sys_write(int, const void *, size_t);
114 1.24.2.2 christos ssize_t _sys_writev(int, const struct iovec *, int);
115 1.24.2.2 christos int _sys___sigsuspend14(const sigset_t *);
116 1.24.2.2 christos int ____sigtimedwait50(const sigset_t * __restrict, siginfo_t * __restrict,
117 1.24.2.2 christos const struct timespec * __restrict);
118 1.24.2.2 christos int __sigsuspend14(const sigset_t *);
119 1.24.2.2 christos
120 1.24.2.2 christos #define TESTCANCEL(id) do { \
121 1.24.2.2 christos if (__predict_false((id)->pt_cancel)) \
122 1.24.2.2 christos pthread__cancelled(); \
123 1.24.2.2 christos } while (/*CONSTCOND*/0)
124 1.24.2.2 christos
125 1.24.2.2 christos
126 1.24.2.2 christos int
127 1.24.2.2 christos accept(int s, struct sockaddr *addr, socklen_t *addrlen)
128 1.24.2.2 christos {
129 1.24.2.2 christos int retval;
130 1.24.2.2 christos pthread_t self;
131 1.24.2.2 christos
132 1.24.2.2 christos self = pthread__self();
133 1.24.2.2 christos TESTCANCEL(self);
134 1.24.2.2 christos retval = _sys_accept(s, addr, addrlen);
135 1.24.2.2 christos TESTCANCEL(self);
136 1.24.2.2 christos
137 1.24.2.2 christos return retval;
138 1.24.2.2 christos }
139 1.24.2.2 christos
140 1.24.2.2 christos int
141 1.24.2.2 christos __aio_suspend50(const struct aiocb * const list[], int nent,
142 1.24.2.2 christos const struct timespec *timeout)
143 1.24.2.2 christos {
144 1.24.2.2 christos int retval;
145 1.24.2.2 christos pthread_t self;
146 1.24.2.2 christos
147 1.24.2.2 christos self = pthread__self();
148 1.24.2.2 christos TESTCANCEL(self);
149 1.24.2.2 christos retval = _sys___aio_suspend50(list, nent, timeout);
150 1.24.2.2 christos TESTCANCEL(self);
151 1.24.2.2 christos
152 1.24.2.2 christos return retval;
153 1.24.2.2 christos }
154 1.24.2.2 christos
155 1.24.2.2 christos int
156 1.24.2.2 christos close(int d)
157 1.24.2.2 christos {
158 1.24.2.2 christos int retval;
159 1.24.2.2 christos pthread_t self;
160 1.24.2.2 christos
161 1.24.2.2 christos self = pthread__self();
162 1.24.2.2 christos TESTCANCEL(self);
163 1.24.2.2 christos retval = _sys_close(d);
164 1.24.2.2 christos TESTCANCEL(self);
165 1.24.2.2 christos
166 1.24.2.2 christos return retval;
167 1.24.2.2 christos }
168 1.24.2.2 christos
169 1.24.2.2 christos int
170 1.24.2.2 christos connect(int s, const struct sockaddr *addr, socklen_t namelen)
171 1.24.2.2 christos {
172 1.24.2.2 christos int retval;
173 1.24.2.2 christos pthread_t self;
174 1.24.2.2 christos
175 1.24.2.2 christos self = pthread__self();
176 1.24.2.2 christos TESTCANCEL(self);
177 1.24.2.2 christos retval = _sys_connect(s, addr, namelen);
178 1.24.2.2 christos TESTCANCEL(self);
179 1.24.2.2 christos
180 1.24.2.2 christos return retval;
181 1.24.2.2 christos }
182 1.24.2.2 christos
183 1.24.2.2 christos int
184 1.24.2.2 christos fcntl(int fd, int cmd, ...)
185 1.24.2.2 christos {
186 1.24.2.2 christos int retval;
187 1.24.2.2 christos pthread_t self;
188 1.24.2.2 christos va_list ap;
189 1.24.2.2 christos
190 1.24.2.2 christos self = pthread__self();
191 1.24.2.2 christos TESTCANCEL(self);
192 1.24.2.2 christos va_start(ap, cmd);
193 1.24.2.2 christos retval = _sys_fcntl(fd, cmd, va_arg(ap, void *));
194 1.24.2.2 christos va_end(ap);
195 1.24.2.2 christos TESTCANCEL(self);
196 1.24.2.2 christos
197 1.24.2.2 christos return retval;
198 1.24.2.2 christos }
199 1.24.2.2 christos
200 1.24.2.2 christos int
201 1.24.2.2 christos fdatasync(int d)
202 1.24.2.2 christos {
203 1.24.2.2 christos int retval;
204 1.24.2.2 christos pthread_t self;
205 1.24.2.2 christos
206 1.24.2.2 christos self = pthread__self();
207 1.24.2.2 christos TESTCANCEL(self);
208 1.24.2.2 christos retval = _sys_fdatasync(d);
209 1.24.2.2 christos TESTCANCEL(self);
210 1.24.2.2 christos
211 1.24.2.2 christos return retval;
212 1.24.2.2 christos }
213 1.24.2.2 christos
214 1.24.2.2 christos int
215 1.24.2.2 christos fsync(int d)
216 1.24.2.2 christos {
217 1.24.2.2 christos int retval;
218 1.24.2.2 christos pthread_t self;
219 1.24.2.2 christos
220 1.24.2.2 christos self = pthread__self();
221 1.24.2.2 christos TESTCANCEL(self);
222 1.24.2.2 christos retval = _sys_fsync(d);
223 1.24.2.2 christos TESTCANCEL(self);
224 1.24.2.2 christos
225 1.24.2.2 christos return retval;
226 1.24.2.2 christos }
227 1.24.2.2 christos
228 1.24.2.2 christos int
229 1.24.2.2 christos fsync_range(int d, int f, off_t s, off_t e)
230 1.24.2.2 christos {
231 1.24.2.2 christos int retval;
232 1.24.2.2 christos pthread_t self;
233 1.24.2.2 christos
234 1.24.2.2 christos self = pthread__self();
235 1.24.2.2 christos TESTCANCEL(self);
236 1.24.2.2 christos retval = _sys_fsync_range(d, f, s, e);
237 1.24.2.2 christos TESTCANCEL(self);
238 1.24.2.2 christos
239 1.24.2.2 christos return retval;
240 1.24.2.2 christos }
241 1.24.2.2 christos
242 1.24.2.2 christos int
243 1.24.2.2 christos mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio)
244 1.24.2.2 christos {
245 1.24.2.2 christos int retval;
246 1.24.2.2 christos pthread_t self;
247 1.24.2.2 christos
248 1.24.2.2 christos self = pthread__self();
249 1.24.2.2 christos TESTCANCEL(self);
250 1.24.2.2 christos retval = _sys_mq_send(mqdes, msg_ptr, msg_len, msg_prio);
251 1.24.2.2 christos TESTCANCEL(self);
252 1.24.2.2 christos
253 1.24.2.2 christos return retval;
254 1.24.2.2 christos }
255 1.24.2.2 christos
256 1.24.2.2 christos ssize_t
257 1.24.2.2 christos mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio)
258 1.24.2.2 christos {
259 1.24.2.2 christos ssize_t retval;
260 1.24.2.2 christos pthread_t self;
261 1.24.2.2 christos
262 1.24.2.2 christos self = pthread__self();
263 1.24.2.2 christos TESTCANCEL(self);
264 1.24.2.2 christos retval = _sys_mq_receive(mqdes, msg_ptr, msg_len, msg_prio);
265 1.24.2.2 christos TESTCANCEL(self);
266 1.24.2.2 christos
267 1.24.2.2 christos return retval;
268 1.24.2.2 christos }
269 1.24.2.2 christos
270 1.24.2.2 christos int
271 1.24.2.2 christos __mq_timedsend50(mqd_t mqdes, const char *msg_ptr, size_t msg_len,
272 1.24.2.2 christos unsigned msg_prio, const struct timespec *abst)
273 1.24.2.2 christos {
274 1.24.2.2 christos int retval;
275 1.24.2.2 christos pthread_t self;
276 1.24.2.2 christos
277 1.24.2.2 christos self = pthread__self();
278 1.24.2.2 christos TESTCANCEL(self);
279 1.24.2.2 christos retval = _sys___mq_timedsend50(mqdes, msg_ptr, msg_len, msg_prio, abst);
280 1.24.2.2 christos TESTCANCEL(self);
281 1.24.2.2 christos
282 1.24.2.2 christos return retval;
283 1.24.2.2 christos }
284 1.24.2.2 christos
285 1.24.2.2 christos ssize_t
286 1.24.2.2 christos __mq_timedreceive50(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio,
287 1.24.2.2 christos const struct timespec *abst)
288 1.24.2.2 christos {
289 1.24.2.2 christos ssize_t retval;
290 1.24.2.2 christos pthread_t self;
291 1.24.2.2 christos
292 1.24.2.2 christos self = pthread__self();
293 1.24.2.2 christos TESTCANCEL(self);
294 1.24.2.2 christos retval = _sys___mq_timedreceive50(mqdes, msg_ptr, msg_len, msg_prio, abst);
295 1.24.2.2 christos TESTCANCEL(self);
296 1.24.2.2 christos
297 1.24.2.2 christos return retval;
298 1.24.2.2 christos }
299 1.24.2.2 christos
300 1.24.2.2 christos ssize_t
301 1.24.2.2 christos msgrcv(int msgid, void *msgp, size_t msgsz, long msgtyp, int msgflg)
302 1.24.2.2 christos {
303 1.24.2.2 christos ssize_t retval;
304 1.24.2.2 christos pthread_t self;
305 1.24.2.2 christos
306 1.24.2.2 christos self = pthread__self();
307 1.24.2.2 christos TESTCANCEL(self);
308 1.24.2.2 christos retval = _sys_msgrcv(msgid, msgp, msgsz, msgtyp, msgflg);
309 1.24.2.2 christos TESTCANCEL(self);
310 1.24.2.2 christos
311 1.24.2.2 christos return retval;
312 1.24.2.2 christos }
313 1.24.2.2 christos
314 1.24.2.2 christos int
315 1.24.2.2 christos msgsnd(int msgid, const void *msgp, size_t msgsz, int msgflg)
316 1.24.2.2 christos {
317 1.24.2.2 christos int retval;
318 1.24.2.2 christos pthread_t self;
319 1.24.2.2 christos
320 1.24.2.2 christos self = pthread__self();
321 1.24.2.2 christos TESTCANCEL(self);
322 1.24.2.2 christos retval = _sys_msgsnd(msgid, msgp, msgsz, msgflg);
323 1.24.2.2 christos TESTCANCEL(self);
324 1.24.2.2 christos
325 1.24.2.2 christos return retval;
326 1.24.2.2 christos }
327 1.24.2.2 christos
328 1.24.2.2 christos int
329 1.24.2.2 christos __msync13(void *addr, size_t len, int flags)
330 1.24.2.2 christos {
331 1.24.2.2 christos int retval;
332 1.24.2.2 christos pthread_t self;
333 1.24.2.2 christos
334 1.24.2.2 christos self = pthread__self();
335 1.24.2.2 christos TESTCANCEL(self);
336 1.24.2.2 christos retval = _sys___msync13(addr, len, flags);
337 1.24.2.2 christos TESTCANCEL(self);
338 1.24.2.2 christos
339 1.24.2.2 christos return retval;
340 1.24.2.2 christos }
341 1.24.2.2 christos
342 1.24.2.2 christos int
343 1.24.2.2 christos open(const char *path, int flags, ...)
344 1.24.2.2 christos {
345 1.24.2.2 christos int retval;
346 1.24.2.2 christos pthread_t self;
347 1.24.2.2 christos va_list ap;
348 1.24.2.2 christos
349 1.24.2.2 christos self = pthread__self();
350 1.24.2.2 christos TESTCANCEL(self);
351 1.24.2.2 christos va_start(ap, flags);
352 1.24.2.2 christos retval = _sys_open(path, flags, va_arg(ap, mode_t));
353 1.24.2.2 christos va_end(ap);
354 1.24.2.2 christos TESTCANCEL(self);
355 1.24.2.2 christos
356 1.24.2.2 christos return retval;
357 1.24.2.2 christos }
358 1.24.2.2 christos
359 1.24.2.2 christos int
360 1.24.2.2 christos poll(struct pollfd *fds, nfds_t nfds, int timeout)
361 1.24.2.2 christos {
362 1.24.2.2 christos int retval;
363 1.24.2.2 christos pthread_t self;
364 1.24.2.2 christos
365 1.24.2.2 christos self = pthread__self();
366 1.24.2.2 christos TESTCANCEL(self);
367 1.24.2.2 christos retval = _sys_poll(fds, nfds, timeout);
368 1.24.2.2 christos TESTCANCEL(self);
369 1.24.2.2 christos
370 1.24.2.2 christos return retval;
371 1.24.2.2 christos }
372 1.24.2.2 christos
373 1.24.2.2 christos int
374 1.24.2.2 christos __pollts50(struct pollfd *fds, nfds_t nfds, const struct timespec *ts,
375 1.24.2.2 christos const sigset_t *sigmask)
376 1.24.2.2 christos {
377 1.24.2.2 christos int retval;
378 1.24.2.2 christos pthread_t self;
379 1.24.2.2 christos
380 1.24.2.2 christos self = pthread__self();
381 1.24.2.2 christos TESTCANCEL(self);
382 1.24.2.2 christos retval = _sys___pollts50(fds, nfds, ts, sigmask);
383 1.24.2.2 christos TESTCANCEL(self);
384 1.24.2.2 christos
385 1.24.2.2 christos return retval;
386 1.24.2.2 christos }
387 1.24.2.2 christos
388 1.24.2.2 christos ssize_t
389 1.24.2.2 christos pread(int d, void *buf, size_t nbytes, off_t offset)
390 1.24.2.2 christos {
391 1.24.2.2 christos ssize_t retval;
392 1.24.2.2 christos pthread_t self;
393 1.24.2.2 christos
394 1.24.2.2 christos self = pthread__self();
395 1.24.2.2 christos TESTCANCEL(self);
396 1.24.2.2 christos retval = _sys_pread(d, buf, nbytes, offset);
397 1.24.2.2 christos TESTCANCEL(self);
398 1.24.2.2 christos
399 1.24.2.2 christos return retval;
400 1.24.2.2 christos }
401 1.24.2.2 christos
402 1.24.2.2 christos int
403 1.24.2.2 christos __pselect50(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
404 1.24.2.2 christos const struct timespec *timeout, const sigset_t *sigmask)
405 1.24.2.2 christos {
406 1.24.2.2 christos int retval;
407 1.24.2.2 christos pthread_t self;
408 1.24.2.2 christos
409 1.24.2.2 christos self = pthread__self();
410 1.24.2.2 christos TESTCANCEL(self);
411 1.24.2.2 christos retval = _sys___pselect50(nfds, readfds, writefds, exceptfds, timeout,
412 1.24.2.2 christos sigmask);
413 1.24.2.2 christos TESTCANCEL(self);
414 1.24.2.2 christos
415 1.24.2.2 christos return retval;
416 1.24.2.2 christos }
417 1.24.2.2 christos
418 1.24.2.2 christos ssize_t
419 1.24.2.2 christos pwrite(int d, const void *buf, size_t nbytes, off_t offset)
420 1.24.2.2 christos {
421 1.24.2.2 christos ssize_t retval;
422 1.24.2.2 christos pthread_t self;
423 1.24.2.2 christos
424 1.24.2.2 christos self = pthread__self();
425 1.24.2.2 christos TESTCANCEL(self);
426 1.24.2.2 christos retval = _sys_pwrite(d, buf, nbytes, offset);
427 1.24.2.2 christos TESTCANCEL(self);
428 1.24.2.2 christos
429 1.24.2.2 christos return retval;
430 1.24.2.2 christos }
431 1.24.2.2 christos
432 1.24.2.2 christos #ifdef _FORTIFY_SOURCE
433 1.24.2.2 christos #undef read
434 1.24.2.2 christos #endif
435 1.24.2.2 christos
436 1.24.2.2 christos ssize_t
437 1.24.2.2 christos read(int d, void *buf, size_t nbytes)
438 1.24.2.2 christos {
439 1.24.2.2 christos ssize_t retval;
440 1.24.2.2 christos pthread_t self;
441 1.24.2.2 christos
442 1.24.2.2 christos self = pthread__self();
443 1.24.2.2 christos TESTCANCEL(self);
444 1.24.2.2 christos retval = _sys_read(d, buf, nbytes);
445 1.24.2.2 christos TESTCANCEL(self);
446 1.24.2.2 christos
447 1.24.2.2 christos return retval;
448 1.24.2.2 christos }
449 1.24.2.2 christos
450 1.24.2.2 christos ssize_t
451 1.24.2.2 christos readv(int d, const struct iovec *iov, int iovcnt)
452 1.24.2.2 christos {
453 1.24.2.2 christos ssize_t retval;
454 1.24.2.2 christos pthread_t self;
455 1.24.2.2 christos
456 1.24.2.2 christos self = pthread__self();
457 1.24.2.2 christos TESTCANCEL(self);
458 1.24.2.2 christos retval = _sys_readv(d, iov, iovcnt);
459 1.24.2.2 christos TESTCANCEL(self);
460 1.24.2.2 christos
461 1.24.2.2 christos return retval;
462 1.24.2.2 christos }
463 1.24.2.2 christos
464 1.24.2.2 christos int
465 1.24.2.2 christos __select50(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
466 1.24.2.2 christos struct timeval *timeout)
467 1.24.2.2 christos {
468 1.24.2.2 christos int retval;
469 1.24.2.2 christos pthread_t self;
470 1.24.2.2 christos
471 1.24.2.2 christos self = pthread__self();
472 1.24.2.2 christos TESTCANCEL(self);
473 1.24.2.2 christos retval = _sys___select50(nfds, readfds, writefds, exceptfds, timeout);
474 1.24.2.2 christos TESTCANCEL(self);
475 1.24.2.2 christos
476 1.24.2.2 christos return retval;
477 1.24.2.2 christos }
478 1.24.2.2 christos
479 1.24.2.2 christos pid_t
480 1.24.2.2 christos __wait450(pid_t wpid, int *status, int options, struct rusage *rusage)
481 1.24.2.2 christos {
482 1.24.2.2 christos pid_t retval;
483 1.24.2.2 christos pthread_t self;
484 1.24.2.2 christos
485 1.24.2.2 christos self = pthread__self();
486 1.24.2.2 christos TESTCANCEL(self);
487 1.24.2.2 christos retval = _sys___wait450(wpid, status, options, rusage);
488 1.24.2.2 christos TESTCANCEL(self);
489 1.24.2.2 christos
490 1.24.2.2 christos return retval;
491 1.24.2.2 christos }
492 1.24.2.2 christos
493 1.24.2.2 christos ssize_t
494 1.24.2.2 christos write(int d, const void *buf, size_t nbytes)
495 1.24.2.2 christos {
496 1.24.2.2 christos ssize_t retval;
497 1.24.2.2 christos pthread_t self;
498 1.24.2.2 christos
499 1.24.2.2 christos self = pthread__self();
500 1.24.2.2 christos TESTCANCEL(self);
501 1.24.2.2 christos retval = _sys_write(d, buf, nbytes);
502 1.24.2.2 christos TESTCANCEL(self);
503 1.24.2.2 christos
504 1.24.2.2 christos return retval;
505 1.24.2.2 christos }
506 1.24.2.2 christos
507 1.24.2.2 christos ssize_t
508 1.24.2.2 christos writev(int d, const struct iovec *iov, int iovcnt)
509 1.24.2.2 christos {
510 1.24.2.2 christos ssize_t retval;
511 1.24.2.2 christos pthread_t self;
512 1.24.2.2 christos
513 1.24.2.2 christos self = pthread__self();
514 1.24.2.2 christos TESTCANCEL(self);
515 1.24.2.2 christos retval = _sys_writev(d, iov, iovcnt);
516 1.24.2.2 christos TESTCANCEL(self);
517 1.24.2.2 christos
518 1.24.2.2 christos return retval;
519 1.24.2.2 christos }
520 1.24.2.2 christos
521 1.24.2.2 christos int
522 1.24.2.2 christos __sigsuspend14(const sigset_t *sigmask)
523 1.24.2.2 christos {
524 1.24.2.2 christos pthread_t self;
525 1.24.2.2 christos int retval;
526 1.24.2.2 christos
527 1.24.2.2 christos self = pthread__self();
528 1.24.2.2 christos TESTCANCEL(self);
529 1.24.2.2 christos retval = _sys___sigsuspend14(sigmask);
530 1.24.2.2 christos TESTCANCEL(self);
531 1.24.2.2 christos
532 1.24.2.2 christos return retval;
533 1.24.2.2 christos }
534 1.24.2.2 christos
535 1.24.2.2 christos int
536 1.24.2.2 christos __sigtimedwait50(const sigset_t * __restrict set, siginfo_t * __restrict info,
537 1.24.2.2 christos const struct timespec * __restrict timeout)
538 1.24.2.2 christos {
539 1.24.2.2 christos pthread_t self;
540 1.24.2.2 christos int retval;
541 1.24.2.2 christos
542 1.24.2.2 christos self = pthread__self();
543 1.24.2.2 christos TESTCANCEL(self);
544 1.24.2.2 christos retval = ____sigtimedwait50(set, info, timeout);
545 1.24.2.2 christos TESTCANCEL(self);
546 1.24.2.2 christos
547 1.24.2.2 christos return retval;
548 1.24.2.2 christos }
549 1.24.2.2 christos
550 1.24.2.2 christos __strong_alias(_close, close)
551 1.24.2.2 christos __strong_alias(_fcntl, fcntl)
552 1.24.2.2 christos __strong_alias(_fdatasync, fdatasync)
553 1.24.2.2 christos __strong_alias(_fsync, fsync)
554 1.24.2.2 christos __weak_alias(fsync_range, _fsync_range)
555 1.24.2.2 christos __strong_alias(_mq_send, mq_send)
556 1.24.2.2 christos __strong_alias(_mq_receive, mq_receive)
557 1.24.2.2 christos __strong_alias(_msgrcv, msgrcv)
558 1.24.2.2 christos __strong_alias(_msgsnd, msgsnd)
559 1.24.2.2 christos __strong_alias(___msync13, __msync13)
560 1.24.2.2 christos __strong_alias(_open, open)
561 1.24.2.2 christos __strong_alias(_poll, poll)
562 1.24.2.2 christos __strong_alias(_pread, pread)
563 1.24.2.2 christos __strong_alias(_pwrite, pwrite)
564 1.24.2.2 christos __strong_alias(_read, read)
565 1.24.2.2 christos __strong_alias(_readv, readv)
566 1.24.2.2 christos __strong_alias(_write, write)
567 1.24.2.2 christos __strong_alias(_writev, writev)
568 1.24.2.2 christos
569 1.24.2.2 christos #endif /* !lint */
570