Mon Jan 5 01:28:26 2009 UTC ()
protect functions that use timespec, but don't bother defining compat versions
since we are going to bump. Fixes lint issues in libc.


(christos)
diff -r1.32 -r1.32.6.1 src/lib/libpthread/pthread.h

cvs diff -r1.32 -r1.32.6.1 src/lib/libpthread/pthread.h (expand / switch to unified diff)

--- src/lib/libpthread/pthread.h 2008/07/18 16:17:11 1.32
+++ src/lib/libpthread/pthread.h 2008/07/18 16:17:11 1.32.6.1
@@ -1,374 +0,0 @@ @@ -1,374 +0,0 @@
1/* $NetBSD: pthread.h,v 1.32 2008/07/18 16:17:11 pooka Exp $ */ 
2 
3/*- 
4 * Copyright (c) 2001 The NetBSD Foundation, Inc. 
5 * All rights reserved. 
6 * 
7 * This code is derived from software contributed to The NetBSD Foundation 
8 * by Nathan J. Williams. 
9 * 
10 * Redistribution and use in source and binary forms, with or without 
11 * modification, are permitted provided that the following conditions 
12 * are met: 
13 * 1. Redistributions of source code must retain the above copyright 
14 * notice, this list of conditions and the following disclaimer. 
15 * 2. Redistributions in binary form must reproduce the above copyright 
16 * notice, this list of conditions and the following disclaimer in the 
17 * documentation and/or other materials provided with the distribution. 
18 * 
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
29 * POSSIBILITY OF SUCH DAMAGE. 
30 */ 
31 
32#ifndef _LIB_PTHREAD_H 
33#define _LIB_PTHREAD_H 
34 
35#include <sys/cdefs.h> 
36 
37#include <time.h> /* For timespec */ 
38#include <sched.h> 
39#include <sys/featuretest.h> 
40 
41#include <pthread_types.h> 
42 
43__BEGIN_DECLS 
44int pthread_atfork(void (*)(void), void (*)(void), void (*)(void)); 
45int pthread_create(pthread_t * __restrict, 
46 const pthread_attr_t * __restrict, void *(*)(void *), 
47 void * __restrict); 
48void pthread_exit(void *) __attribute__((__noreturn__)); 
49int pthread_join(pthread_t, void **); 
50int pthread_equal(pthread_t, pthread_t); 
51pthread_t pthread_self(void); 
52int pthread_detach(pthread_t); 
53 
54int pthread_getrrtimer_np(void); 
55int pthread_setrrtimer_np(int); 
56 
57int pthread_attr_init(pthread_attr_t *); 
58int pthread_attr_destroy(pthread_attr_t *); 
59int pthread_attr_get_np(pthread_t, pthread_attr_t *); 
60int pthread_attr_getguardsize(const pthread_attr_t * __restrict, 
61 size_t * __restrict); 
62int pthread_attr_setguardsize(pthread_attr_t *, size_t); 
63int pthread_attr_getinheritsched(const pthread_attr_t * __restrict, 
64 int * __restrict); 
65int pthread_attr_setinheritsched(pthread_attr_t *, int); 
66int pthread_attr_getschedparam(const pthread_attr_t * __restrict, 
67 struct sched_param * __restrict); 
68int pthread_attr_setschedparam(pthread_attr_t * __restrict, 
69 const struct sched_param * __restrict); 
70int pthread_attr_getschedpolicy(const pthread_attr_t * __restrict, 
71 int * __restrict); 
72int pthread_attr_setschedpolicy(pthread_attr_t *, int); 
73int pthread_attr_getscope(const pthread_attr_t * __restrict, 
74 int * __restrict); 
75int pthread_attr_setscope(pthread_attr_t *, int); 
76int pthread_attr_getstack(const pthread_attr_t * __restrict, 
77 void ** __restrict, size_t * __restrict); 
78int pthread_attr_setstack(pthread_attr_t *, void *, size_t); 
79int pthread_attr_getstacksize(const pthread_attr_t * __restrict, 
80 size_t * __restrict); 
81int pthread_attr_setstacksize(pthread_attr_t *, size_t); 
82int pthread_attr_getstackaddr(const pthread_attr_t * __restrict, 
83 void ** __restrict); 
84int pthread_attr_setstackaddr(pthread_attr_t *, void *); 
85int pthread_attr_getdetachstate(const pthread_attr_t *, int *); 
86int pthread_attr_setdetachstate(pthread_attr_t *, int); 
87int pthread_attr_getname_np(const pthread_attr_t *, char *, 
88 size_t, void **); 
89int pthread_attr_setname_np(pthread_attr_t *, const char *, void *); 
90 
91int pthread_mutex_init(pthread_mutex_t * __restrict, 
92 const pthread_mutexattr_t * __restrict); 
93int pthread_mutex_destroy(pthread_mutex_t *); 
94int pthread_mutex_lock(pthread_mutex_t *); 
95int pthread_mutex_trylock(pthread_mutex_t *); 
96int pthread_mutex_unlock(pthread_mutex_t *); 
97int pthread_mutexattr_init(pthread_mutexattr_t *); 
98int pthread_mutexattr_destroy(pthread_mutexattr_t *); 
99int pthread_mutexattr_gettype(const pthread_mutexattr_t * __restrict, 
100 int * __restrict); 
101int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int); 
102 
103int pthread_cond_init(pthread_cond_t * __restrict, 
104 const pthread_condattr_t * __restrict); 
105int pthread_cond_destroy(pthread_cond_t *); 
106int pthread_cond_wait(pthread_cond_t * __restrict, 
107 pthread_mutex_t * __restrict); 
108int pthread_cond_timedwait(pthread_cond_t * __restrict, 
109 pthread_mutex_t * __restrict, const struct timespec * __restrict); 
110int pthread_cond_signal(pthread_cond_t *); 
111int pthread_cond_broadcast(pthread_cond_t *); 
112int pthread_condattr_init(pthread_condattr_t *); 
113int pthread_condattr_destroy(pthread_condattr_t *); 
114 
115int pthread_once(pthread_once_t *, void (*)(void)); 
116 
117int pthread_key_create(pthread_key_t *, void (*)(void *)); 
118int pthread_key_delete(pthread_key_t); 
119int pthread_setspecific(pthread_key_t, const void *); 
120void* pthread_getspecific(pthread_key_t); 
121 
122int pthread_cancel(pthread_t); 
123int pthread_setcancelstate(int, int *); 
124int pthread_setcanceltype(int, int *); 
125void pthread_testcancel(void); 
126 
127int pthread_getname_np(pthread_t, char *, size_t); 
128int pthread_setname_np(pthread_t, const char *, void *); 
129 
130int pthread_attr_setcreatesuspend_np(pthread_attr_t *); 
131int pthread_suspend_np(pthread_t); 
132int pthread_resume_np(pthread_t); 
133 
134unsigned int pthread_curcpu_np(void); 
135 
136struct pthread_cleanup_store { 
137 void *pad[4]; 
138}; 
139 
140#define pthread_cleanup_push(routine, arg) \ 
141 { \ 
142 struct pthread_cleanup_store __store; \ 
143 pthread__cleanup_push((routine),(arg), &__store); 
144 
145#define pthread_cleanup_pop(execute) \ 
146 pthread__cleanup_pop((execute), &__store); \ 
147 } 
148 
149void pthread__cleanup_push(void (*)(void *), void *, void *); 
150void pthread__cleanup_pop(int, void *); 
151 
152int pthread_spin_init(pthread_spinlock_t *, int); 
153int pthread_spin_destroy(pthread_spinlock_t *); 
154int pthread_spin_lock(pthread_spinlock_t *); 
155int pthread_spin_trylock(pthread_spinlock_t *); 
156int pthread_spin_unlock(pthread_spinlock_t *); 
157 
158int pthread_rwlock_init(pthread_rwlock_t * __restrict, 
159 const pthread_rwlockattr_t * __restrict); 
160int pthread_rwlock_destroy(pthread_rwlock_t *); 
161int pthread_rwlock_rdlock(pthread_rwlock_t *); 
162int pthread_rwlock_tryrdlock(pthread_rwlock_t *); 
163int pthread_rwlock_wrlock(pthread_rwlock_t *); 
164int pthread_rwlock_trywrlock(pthread_rwlock_t *); 
165int pthread_rwlock_timedrdlock(pthread_rwlock_t * __restrict, 
166 const struct timespec * __restrict); 
167int pthread_rwlock_timedwrlock(pthread_rwlock_t * __restrict, 
168 const struct timespec * __restrict); 
169int pthread_rwlock_unlock(pthread_rwlock_t *); 
170int pthread_rwlockattr_init(pthread_rwlockattr_t *); 
171int pthread_rwlockattr_destroy(pthread_rwlockattr_t *); 
172 
173int pthread_barrier_init(pthread_barrier_t * __restrict, 
174 const pthread_barrierattr_t * __restrict, unsigned int); 
175int pthread_barrier_wait(pthread_barrier_t *); 
176int pthread_barrier_destroy(pthread_barrier_t *); 
177int pthread_barrierattr_init(pthread_barrierattr_t *); 
178int pthread_barrierattr_destroy(pthread_barrierattr_t *); 
179 
180int pthread_getschedparam(pthread_t, int * __restrict, 
181 struct sched_param * __restrict); 
182int pthread_setschedparam(pthread_t, int, const struct sched_param *); 
183int pthread_setschedprio(pthread_t, int); 
184 
185int *pthread__errno(void); 
186 
187#if defined(_NETBSD_SOURCE) 
188int pthread_getaffinity_np(pthread_t, size_t, cpuset_t *); 
189int pthread_setaffinity_np(pthread_t, size_t, cpuset_t *); 
190 
191int pthread_mutex_held_np(pthread_mutex_t *); 
192pthread_t pthread_mutex_owner_np(pthread_mutex_t *); 
193 
194int pthread_rwlock_held_np(pthread_rwlock_t *); 
195int pthread_rwlock_wrheld_np(pthread_rwlock_t *); 
196int pthread_rwlock_rdheld_np(pthread_rwlock_t *); 
197 
198int pthread_cond_has_waiters_np(pthread_cond_t *); 
199#endif /* _NETBSD_SOURCE */ 
200 
201__END_DECLS 
202 
203#define PTHREAD_CREATE_JOINABLE 0 
204#define PTHREAD_CREATE_DETACHED 1 
205 
206#define PTHREAD_INHERIT_SCHED 0 
207#define PTHREAD_EXPLICIT_SCHED 1 
208 
209#define PTHREAD_SCOPE_PROCESS 0 
210#define PTHREAD_SCOPE_SYSTEM 1 
211 
212#define PTHREAD_PROCESS_PRIVATE 0 
213#define PTHREAD_PROCESS_SHARED 1 
214 
215#define PTHREAD_CANCEL_DEFERRED 0 
216#define PTHREAD_CANCEL_ASYNCHRONOUS 1 
217 
218#define PTHREAD_CANCEL_ENABLE 0 
219#define PTHREAD_CANCEL_DISABLE 1 
220 
221#define PTHREAD_BARRIER_SERIAL_THREAD 1234567 
222 
223/* 
224 * POSIX 1003.1-2001, section 2.5.9.3: "The symbolic constant 
225 * PTHREAD_CANCELED expands to a constant expression of type (void *) 
226 * whose value matches no pointer to an object in memory nor the value 
227 * NULL." 
228 */ 
229#define PTHREAD_CANCELED ((void *) 1) 
230 
231/* 
232 * Maximum length of a thread's name, including the terminating NUL. 
233 */ 
234#define PTHREAD_MAX_NAMELEN_NP 32 
235 
236/* 
237 * Mutex attributes. 
238 */ 
239#define PTHREAD_MUTEX_NORMAL 0 
240#define PTHREAD_MUTEX_ERRORCHECK 1 
241#define PTHREAD_MUTEX_RECURSIVE 2 
242#define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL 
243 
244#define PTHREAD_COND_INITIALIZER _PTHREAD_COND_INITIALIZER 
245#define PTHREAD_MUTEX_INITIALIZER _PTHREAD_MUTEX_INITIALIZER 
246#define PTHREAD_ONCE_INIT _PTHREAD_ONCE_INIT 
247#define PTHREAD_RWLOCK_INITIALIZER _PTHREAD_RWLOCK_INITIALIZER 
248#define PTHREAD_SPINLOCK_INITIALIZER _PTHREAD_SPINLOCK_INITIALIZER 
249 
250/* 
251 * Use macros to rename many pthread functions to the corresponding 
252 * libc symbols which are either trivial/no-op stubs or the real 
253 * thing, depending on whether libpthread is linked in to the 
254 * program. This permits code, particularly libraries that do not 
255 * directly use threads but want to be thread-safe in the presence of 
256 * threaded callers, to use pthread mutexes and the like without 
257 * unnecessairly including libpthread in their linkage. 
258 * 
259 * Left out of this list are functions that can't sensibly be trivial 
260 * or no-op stubs in a single-threaded process (pthread_create, 
261 * pthread_kill, pthread_detach), functions that normally block and 
262 * wait for another thread to do something (pthread_join), and 
263 * functions that don't make sense without the previous functions 
264 * (pthread_attr_*). The pthread_cond_wait and pthread_cond_timedwait 
265 * functions are useful in implementing certain protection mechanisms, 
266 * though a non-buggy app shouldn't end up calling them in 
267 * single-threaded mode. 
268 * 
269 * The rename is done as: 
270 * #define pthread_foo __libc_foo 
271 * instead of 
272 * #define pthread_foo(x) __libc_foo((x)) 
273 * in order that taking the address of the function ("func = 
274 * &pthread_foo;") continue to work. 
275 * 
276 * POSIX/SUSv3 requires that its functions exist as functions (even if 
277 * macro versions exist) and specifically that "#undef pthread_foo" is 
278 * legal and should not break anything. Code that does such will not 
279 * successfully get the stub behavior implemented here and will 
280 * require libpthread to be linked in. 
281 */ 
282 
283#ifndef __LIBPTHREAD_SOURCE__ 
284__BEGIN_DECLS 
285int __libc_mutex_init(pthread_mutex_t * __restrict, const pthread_mutexattr_t * __restrict); 
286int __libc_mutex_lock(pthread_mutex_t *); 
287int __libc_mutex_trylock(pthread_mutex_t *); 
288int __libc_mutex_unlock(pthread_mutex_t *); 
289int __libc_mutex_destroy(pthread_mutex_t *); 
290 
291int __libc_mutexattr_init(pthread_mutexattr_t *); 
292int __libc_mutexattr_settype(pthread_mutexattr_t *, int); 
293int __libc_mutexattr_destroy(pthread_mutexattr_t *); 
294__END_DECLS 
295 
296#define pthread_mutex_init __libc_mutex_init 
297#define pthread_mutex_lock __libc_mutex_lock 
298#define pthread_mutex_trylock __libc_mutex_trylock 
299#define pthread_mutex_unlock __libc_mutex_unlock 
300#define pthread_mutex_destroy __libc_mutex_destroy 
301 
302#define pthread_mutexattr_init __libc_mutexattr_init 
303#define pthread_mutexattr_settype __libc_mutexattr_settype 
304#define pthread_mutexattr_destroy __libc_mutexattr_destroy 
305 
306__BEGIN_DECLS 
307int __libc_cond_init(pthread_cond_t * __restrict, 
308 const pthread_condattr_t * __restrict); 
309int __libc_cond_signal(pthread_cond_t *); 
310int __libc_cond_broadcast(pthread_cond_t *); 
311int __libc_cond_wait(pthread_cond_t * __restrict, 
312 pthread_mutex_t * __restrict); 
313int __libc_cond_timedwait(pthread_cond_t * __restrict, 
314 pthread_mutex_t * __restrict, const struct timespec * __restrict); 
315int __libc_cond_destroy(pthread_cond_t *); 
316__END_DECLS 
317 
318#define pthread_cond_init __libc_cond_init 
319#define pthread_cond_signal __libc_cond_signal 
320#define pthread_cond_broadcast __libc_cond_broadcast 
321#define pthread_cond_wait __libc_cond_wait 
322#define pthread_cond_timedwait __libc_cond_timedwait 
323#define pthread_cond_destroy __libc_cond_destroy 
324 
325__BEGIN_DECLS 
326int __libc_rwlock_init(pthread_rwlock_t * __restrict, 
327 const pthread_rwlockattr_t * __restrict); 
328int __libc_rwlock_rdlock(pthread_rwlock_t *); 
329int __libc_rwlock_wrlock(pthread_rwlock_t *); 
330int __libc_rwlock_tryrdlock(pthread_rwlock_t *); 
331int __libc_rwlock_trywrlock(pthread_rwlock_t *); 
332int __libc_rwlock_unlock(pthread_rwlock_t *); 
333int __libc_rwlock_destroy(pthread_rwlock_t *); 
334__END_DECLS 
335 
336#define pthread_rwlock_init __libc_rwlock_init 
337#define pthread_rwlock_rdlock __libc_rwlock_rdlock 
338#define pthread_rwlock_wrlock __libc_rwlock_wrlock 
339#define pthread_rwlock_tryrdlock __libc_rwlock_tryrdlock 
340#define pthread_rwlock_trywrlock __libc_rwlock_trywrlock 
341#define pthread_rwlock_unlock __libc_rwlock_unlock 
342#define pthread_rwlock_destroy __libc_rwlock_destroy 
343 
344__BEGIN_DECLS 
345int __libc_thr_keycreate(pthread_key_t *, void (*)(void *)); 
346int __libc_thr_setspecific(pthread_key_t, const void *); 
347void *__libc_thr_getspecific(pthread_key_t); 
348int __libc_thr_keydelete(pthread_key_t); 
349__END_DECLS 
350 
351#define pthread_key_create __libc_thr_keycreate 
352#define pthread_setspecific __libc_thr_setspecific 
353#define pthread_getspecific __libc_thr_getspecific 
354#define pthread_key_delete __libc_thr_keydelete 
355 
356__BEGIN_DECLS 
357int __libc_thr_once(pthread_once_t *, void (*)(void)); 
358pthread_t __libc_thr_self(void); 
359void __libc_thr_exit(void *) __attribute__((__noreturn__)); 
360int __libc_thr_setcancelstate(int, int *); 
361int __libc_thr_equal(pthread_t, pthread_t); 
362unsigned int __libc_thr_curcpu(void); 
363__END_DECLS 
364 
365#define pthread_once __libc_thr_once 
366#define pthread_self __libc_thr_self 
367#define pthread_exit __libc_thr_exit 
368#define pthread_setcancelstate __libc_thr_setcancelstate 
369#define pthread_equal __libc_thr_equal 
370#define pthread_curcpu_np __libc_thr_curcpu 
371 
372#endif /* __LIBPTHREAD_SOURCE__ */ 
373 
374#endif /* _LIB_PTHREAD_H */