Date: Wed, 29 Mar 2006 08:47:40 +0200 From: des@des.no (Dag-Erling =?iso-8859-1?Q?Sm=F8rgrav?=) To: threads@freebsd.org Cc: jeff@freebsd.org, davidxu@freebsd.org Subject: libthr cleanup Message-ID: <86slp1u4qb.fsf@xps.des.no>
next in thread | raw e-mail | index | archive | help
--=-=-= Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable The attached patch brings libthr up to WARNS level 2. There is also a small amount of style and whitespace changes mixed in, mostly because I'm so conditioned to style(9) that my fingers sometimes do these things automatically. Parts of the patch go a little further than level 2, but we're nowhere near level 3 (or antything higher). The major obstacle is the umtx interface, which in my eyes is fundamentally broken. The _umtx_op() syscall is intended to replace _umtx_lock() and _umtx_unlock(), and support other operations like sleep, wakeup etc. This is the wrong way to go. If we applied this kind of thinking universally, we'd just define all our system calls as macro wrappers for __syscall(). Beyond these purely philosophical aspects, _umtx_op() seems designed to encourage poor coding practices. It's impossible to use in a type- safe manner: its first argument is supposed to be a struct umtx *, but I don't think there's a single instance in libthr where it is called with an actual struct umtx *. Instead, libthr uses umtx_t, which is defined as long. Sometimes, an umtx_t is passed as the third argument to _umtx_op() as well. Various fields in struct pthread, struct pthread_barrier and struct pthread_cond are declared as umtx_t. Some are used purely as cookies for passing to _umtx_op(); some are used as counters or state variables. It's a miracle libthr works at all. The kernel expects a pointer to a struct umtx; instead, it gets (mostly) a pointer to long. Luckily, struct umtx (which contains a single pointer) is the same size as long on all our platforms. _umtx_op() needs to be split into four system calls: int _umtx_lock_timeout(struct umtx *mtx, const struct timespec * __restrict timeout); int _umtx_unlock(struct umtx *mtx); int _umtx_wait_timeout(const void *cookie, struct umtx *mtx, const struct timespec * __restrict timeout); int _umtx_wake(const void *cookie); _umtx_unlock() already exists with the correct semantics; the rest are new. Note that we can't just add a struct timespec to _umtx_lock(), as that would break the upgrade path from RELENG_5; hence the _timeout suffix. I'm not sure the current implementation of UMTX_OP_WAIT / UMTX_OP_WAKE in the kernel is correct. Normally, a wait primitive (like msleep(), pthread_cond_wait() etc.) takes a cookie and a mutex, and unlocks the mutex while it's sleeping on the cookie. It looks like the umtx code originally worked like this, but I'm not sure it does anymore; it's hard to unravel, partly because I haven't quite figured out the queues yet and partly because I haven't had breakfast. DES --=20 Dag-Erling Sm=F8rgrav - des@des.no --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=libthr.diff Index: Makefile =================================================================== RCS file: /home/ncvs/src/lib/libthr/Makefile,v retrieving revision 1.18 diff -u -r1.18 Makefile --- Makefile 27 Mar 2006 05:58:58 -0000 1.18 +++ Makefile 28 Mar 2006 18:45:36 -0000 @@ -29,8 +29,8 @@ MAN= libthr.3 # enable extra internal consistancy checks -CFLAGS+=-D_PTHREADS_INVARIANTS -Wall -#CFLAGS+=-g +CFLAGS+=-D_PTHREADS_INVARIANTS +WARNS?=2 PRECIOUSLIB= Index: sys/thr_error.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/sys/thr_error.c,v retrieving revision 1.2 diff -u -r1.2 thr_error.c --- sys/thr_error.c 2 Apr 2005 01:20:00 -0000 1.2 +++ sys/thr_error.c 28 Mar 2006 18:12:41 -0000 @@ -36,7 +36,6 @@ #include <pthread.h> -#include "libc_private.h" #include "thr_private.h" #undef errno Index: thread/thr_atfork.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_atfork.c,v retrieving revision 1.2 diff -u -r1.2 thr_atfork.c --- thread/thr_atfork.c 2 Apr 2005 01:20:00 -0000 1.2 +++ thread/thr_atfork.c 28 Mar 2006 18:12:41 -0000 @@ -26,10 +26,14 @@ * $FreeBSD: src/lib/libthr/thread/thr_atfork.c,v 1.2 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" +#include <sys/queue.h> #include <errno.h> -#include <stdlib.h> #include <pthread.h> -#include <sys/queue.h> +#include <pthread.h> +#include <stdlib.h> +#include "un-namespace.h" + #include "thr_private.h" __weak_reference(_pthread_atfork, pthread_atfork); Index: thread/thr_attr.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_attr.c,v retrieving revision 1.4 diff -u -r1.4 thr_attr.c --- thread/thr_attr.c 9 Jan 2006 03:59:51 -0000 1.4 +++ thread/thr_attr.c 28 Mar 2006 18:12:41 -0000 @@ -96,11 +96,13 @@ * $FreeBSD: src/lib/libthr/thread/thr_attr.c,v 1.4 2006/01/09 03:59:51 davidxu Exp $ */ +#include "namespace.h" #include <errno.h> #include <pthread.h> +#include <pthread_np.h> #include <stdlib.h> #include <string.h> -#include <pthread_np.h> +#include "un-namespace.h" #include "thr_private.h" @@ -326,12 +328,12 @@ _thr_check_init(); /* Allocate memory for the attribute object: */ - if ((pattr = (pthread_attr_t) malloc(sizeof(struct pthread_attr))) == NULL) + if ((pattr = malloc(sizeof(*pattr))) == NULL) /* Insufficient memory: */ ret = ENOMEM; else { /* Initialise the attribute object with the defaults: */ - memcpy(pattr, &_pthread_attr_default, sizeof(struct pthread_attr)); + memcpy(pattr, &_pthread_attr_default, sizeof(*pattr)); /* Return a pointer to the attribute object: */ *attr = pattr; Index: thread/thr_autoinit.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_autoinit.c,v retrieving revision 1.2 diff -u -r1.2 thr_autoinit.c --- thread/thr_autoinit.c 23 May 2003 09:48:20 -0000 1.2 +++ thread/thr_autoinit.c 28 Mar 2006 18:12:41 -0000 @@ -33,8 +33,6 @@ * $FreeBSD: src/lib/libthr/thread/thr_autoinit.c,v 1.2 2003/05/23 09:48:20 mtm Exp $ */ -#include <pthread.h> - #include "thr_private.h" /* Index: thread/thr_barrier.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_barrier.c,v retrieving revision 1.4 diff -u -r1.4 thr_barrier.c --- thread/thr_barrier.c 4 Apr 2005 23:43:53 -0000 1.4 +++ thread/thr_barrier.c 28 Mar 2006 18:12:41 -0000 @@ -26,9 +26,11 @@ * $FreeBSD: src/lib/libthr/thread/thr_barrier.c,v 1.4 2005/04/04 23:43:53 davidxu Exp $ */ +#include "namespace.h" #include <errno.h> -#include <stdlib.h> #include <pthread.h> +#include <stdlib.h> +#include "un-namespace.h" #include "thr_private.h" @@ -54,10 +56,12 @@ int _pthread_barrier_init(pthread_barrier_t *barrier, - const pthread_barrierattr_t *attr, int count) + const pthread_barrierattr_t *attr, unsigned int count) { pthread_barrier_t bar; + (void)attr; + if (barrier == NULL || count <= 0) return (EINVAL); Index: thread/thr_barrierattr.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_barrierattr.c,v retrieving revision 1.2 diff -u -r1.2 thr_barrierattr.c --- thread/thr_barrierattr.c 2 Apr 2005 01:20:00 -0000 1.2 +++ thread/thr_barrierattr.c 28 Mar 2006 18:12:41 -0000 @@ -28,9 +28,11 @@ * $FreeBSD: src/lib/libthr/thread/thr_barrierattr.c,v 1.2 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" #include <errno.h> -#include <stdlib.h> #include <pthread.h> +#include <stdlib.h> +#include "un-namespace.h" #include "thr_private.h" Index: thread/thr_cancel.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_cancel.c,v retrieving revision 1.12 diff -u -r1.12 thr_cancel.c --- thread/thr_cancel.c 25 Mar 2006 07:03:13 -0000 1.12 +++ thread/thr_cancel.c 28 Mar 2006 18:12:41 -0000 @@ -27,7 +27,9 @@ * */ +#include "namespace.h" #include <pthread.h> +#include "un-namespace.h" #include "thr_private.h" @@ -78,7 +80,7 @@ newval = curthread->cancelflags; if (SHOULD_CANCEL(newval) && !THR_IN_CRITICAL(curthread)) - pthread_exit(PTHREAD_CANCELED); + _pthread_exit(PTHREAD_CANCELED); } int Index: thread/thr_clean.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_clean.c,v retrieving revision 1.3 diff -u -r1.3 thr_clean.c --- thread/thr_clean.c 2 Apr 2005 01:20:00 -0000 1.3 +++ thread/thr_clean.c 28 Mar 2006 18:12:41 -0000 @@ -32,10 +32,13 @@ * $FreeBSD: src/lib/libthr/thread/thr_clean.c,v 1.3 2005/04/02 01:20:00 davidxu Exp $ */ -#include <signal.h> +#include "namespace.h" +#include <sys/ucontext.h> #include <errno.h> -#include <stdlib.h> #include <pthread.h> +#include <signal.h> +#include <stdlib.h> +#include "namespace.h" #include "thr_private.h" Index: thread/thr_concurrency.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_concurrency.c,v retrieving revision 1.2 diff -u -r1.2 thr_concurrency.c --- thread/thr_concurrency.c 2 Apr 2005 01:20:00 -0000 1.2 +++ thread/thr_concurrency.c 28 Mar 2006 18:12:41 -0000 @@ -32,8 +32,10 @@ * $FreeBSD: src/lib/libthr/thread/thr_concurrency.c,v 1.2 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" #include <errno.h> #include <pthread.h> +#include "un-namespace.h" #include "thr_private.h" Index: thread/thr_cond.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_cond.c,v retrieving revision 1.16 diff -u -r1.16 thr_cond.c --- thread/thr_cond.c 2 Apr 2005 01:20:00 -0000 1.16 +++ thread/thr_cond.c 28 Mar 2006 18:12:41 -0000 @@ -26,11 +26,13 @@ * $FreeBSD: src/lib/libthr/thread/thr_cond.c,v 1.16 2005/04/02 01:20:00 davidxu Exp $ */ -#include <stdlib.h> +#include "namespace.h" #include <errno.h> -#include <string.h> -#include <pthread.h> #include <limits.h> +#include <pthread.h> +#include <stdlib.h> +#include <string.h> +#include "un-namespace.h" #include "thr_private.h" @@ -46,7 +48,11 @@ * Double underscore versions are cancellation points. Single underscore * versions are not and are provided for libc internal usage (which * shouldn't introduce cancellation points). + * XXX a sane person would have done it the other way around. */ +int __pthread_cond_timedwait(pthread_cond_t *, + pthread_mutex_t *, const struct timespec *); +int __pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *); __weak_reference(__pthread_cond_wait, pthread_cond_wait); __weak_reference(__pthread_cond_timedwait, pthread_cond_timedwait); Index: thread/thr_condattr.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_condattr.c,v retrieving revision 1.1 diff -u -r1.1 thr_condattr.c --- thread/thr_condattr.c 2 Apr 2005 01:20:00 -0000 1.1 +++ thread/thr_condattr.c 28 Mar 2006 18:12:41 -0000 @@ -32,10 +32,12 @@ * $FreeBSD: src/lib/libthr/thread/thr_condattr.c,v 1.1 2005/04/02 01:20:00 davidxu Exp $ */ -#include <stdlib.h> -#include <string.h> +#include "namespace.h" #include <errno.h> #include <pthread.h> +#include <stdlib.h> +#include <string.h> +#include "un-namespace.h" #include "thr_private.h" Index: thread/thr_create.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_create.c,v retrieving revision 1.28 diff -u -r1.28 thr_create.c --- thread/thr_create.c 27 Mar 2006 23:50:21 -0000 1.28 +++ thread/thr_create.c 28 Mar 2006 18:12:41 -0000 @@ -27,13 +27,18 @@ * $FreeBSD: src/lib/libthr/thread/thr_create.c,v 1.28 2006/03/27 23:50:21 davidxu Exp $ */ +#include "namespace.h" #include <sys/types.h> #include <sys/signalvar.h> +#include <sys/ucontext.h> +#include <sys/thr.h> #include <errno.h> +#include <pthread.h> +#include <signal.h> +#include <stddef.h> #include <stdlib.h> #include <string.h> -#include <stddef.h> -#include <pthread.h> +#include "un-namespace.h" #include "thr_private.h" @@ -230,7 +235,7 @@ * Parent thread have stored signal mask for us, * we should restore it now. */ - sigprocmask(SIG_SETMASK, &set, NULL); + __sys_sigprocmask(SIG_SETMASK, &set, NULL); } /* @@ -242,7 +247,7 @@ THR_UNLOCK(curthread); /* Run the current thread's start routine with argument: */ - pthread_exit(curthread->start_routine(curthread->arg)); + _pthread_exit(curthread->start_routine(curthread->arg)); /* This point should never be reached. */ PANIC("Thread has resumed after exit"); Index: thread/thr_detach.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_detach.c,v retrieving revision 1.10 diff -u -r1.10 thr_detach.c --- thread/thr_detach.c 17 Dec 2005 09:42:45 -0000 1.10 +++ thread/thr_detach.c 28 Mar 2006 18:12:41 -0000 @@ -28,9 +28,11 @@ * */ +#include "namespace.h" #include <sys/types.h> #include <errno.h> #include <pthread.h> +#include "un-namespace.h" #include "thr_private.h" Index: thread/thr_equal.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_equal.c,v retrieving revision 1.1 diff -u -r1.1 thr_equal.c --- thread/thr_equal.c 1 Apr 2003 03:46:28 -0000 1.1 +++ thread/thr_equal.c 28 Mar 2006 18:12:41 -0000 @@ -31,7 +31,11 @@ * * $FreeBSD: src/lib/libthr/thread/thr_equal.c,v 1.1 2003/04/01 03:46:28 jeff Exp $ */ + +#include "namespace.h" #include <pthread.h> +#include "un-namespace.h" + #include "thr_private.h" __weak_reference(_pthread_equal, pthread_equal); Index: thread/thr_exit.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_exit.c,v retrieving revision 1.20 diff -u -r1.20 thr_exit.c --- thread/thr_exit.c 5 Jan 2006 13:51:22 -0000 1.20 +++ thread/thr_exit.c 28 Mar 2006 18:12:41 -0000 @@ -32,10 +32,15 @@ * $FreeBSD: src/lib/libthr/thread/thr_exit.c,v 1.20 2006/01/05 13:51:22 davidxu Exp $ */ +#include "namespace.h" +#include <sys/types.h> +#include <sys/ucontext.h> +#include <sys/thr.h> #include <errno.h> +#include <pthread.h> #include <stdio.h> #include <stdlib.h> -#include <pthread.h> +#include "un-namespace.h" #include "thr_private.h" @@ -44,7 +49,7 @@ __weak_reference(_pthread_exit, pthread_exit); void -_thread_exit(char *fname, int lineno, char *msg) +_thread_exit(const char *fname, int lineno, const char *msg) { /* Write an error message to the standard error file descriptor: */ @@ -103,7 +108,7 @@ /* Save the return value: */ curthread->ret = status; while (curthread->cleanup != NULL) { - pthread_cleanup_pop(1); + _pthread_cleanup_pop(1); } if (curthread->attr.cleanup_attr != NULL) { curthread->attr.cleanup_attr(curthread->attr.arg_attr); Index: thread/thr_fork.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_fork.c,v retrieving revision 1.3 diff -u -r1.3 thr_fork.c --- thread/thr_fork.c 12 Jan 2006 07:28:21 -0000 1.3 +++ thread/thr_fork.c 28 Mar 2006 18:12:41 -0000 @@ -60,12 +60,17 @@ * */ +#include "namespace.h" +#include <sys/types.h> +#include <sys/ucontext.h> +#include <sys/thr.h> #include <errno.h> -#include <string.h> -#include <stdlib.h> -#include <unistd.h> #include <pthread.h> #include <spinlock.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include "un-namespace.h" #include "libc_private.h" #include "thr_private.h" @@ -94,6 +99,8 @@ return (0); } +pid_t _fork(void); + __weak_reference(_fork, fork); pid_t Index: thread/thr_getprio.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_getprio.c,v retrieving revision 1.1 diff -u -r1.1 thr_getprio.c --- thread/thr_getprio.c 1 Apr 2003 03:46:28 -0000 1.1 +++ thread/thr_getprio.c 28 Mar 2006 18:12:41 -0000 @@ -31,8 +31,12 @@ * * $FreeBSD: src/lib/libthr/thread/thr_getprio.c,v 1.1 2003/04/01 03:46:28 jeff Exp $ */ + +#include "namespace.h" #include <errno.h> #include <pthread.h> +#include "un-namespace.h" + #include "thr_private.h" __weak_reference(_pthread_getprio, pthread_getprio); @@ -43,7 +47,7 @@ int policy, ret; struct sched_param param; - if ((ret = pthread_getschedparam(pthread, &policy, ¶m)) == 0) + if ((ret = _pthread_getschedparam(pthread, &policy, ¶m)) == 0) ret = param.sched_priority; else { /* Invalid thread: */ Index: thread/thr_getschedparam.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_getschedparam.c,v retrieving revision 1.3 diff -u -r1.3 thr_getschedparam.c --- thread/thr_getschedparam.c 2 Apr 2005 01:20:00 -0000 1.3 +++ thread/thr_getschedparam.c 28 Mar 2006 18:12:41 -0000 @@ -32,15 +32,17 @@ * $FreeBSD: src/lib/libthr/thread/thr_getschedparam.c,v 1.3 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" #include <errno.h> #include <pthread.h> +#include "un-namespace.h" #include "thr_private.h" __weak_reference(_pthread_getschedparam, pthread_getschedparam); int -_pthread_getschedparam(pthread_t pthread, int *policy, +_pthread_getschedparam(pthread_t pthread, int *policy, struct sched_param *param) { struct pthread *curthread = _get_curthread(); Index: thread/thr_info.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_info.c,v retrieving revision 1.7 diff -u -r1.7 thr_info.c --- thread/thr_info.c 5 Feb 2006 02:26:17 -0000 1.7 +++ thread/thr_info.c 28 Mar 2006 18:12:41 -0000 @@ -32,9 +32,15 @@ * $FreeBSD: src/lib/libthr/thread/thr_info.c,v 1.7 2006/02/05 02:26:17 davidxu Exp $ */ +#include "namespace.h" +#include <sys/types.h> +#include <sys/ucontext.h> +#include <sys/thr.h> +#include <pthread_np.h> #include <stdio.h> #include <stdlib.h> #include <string.h> +#include "un-namespace.h" #include "thr_private.h" @@ -42,7 +48,7 @@ /* Set the thread name for debug. */ void -_pthread_set_name_np(pthread_t thread, char *name) +_pthread_set_name_np(pthread_t thread, const char *name) { struct pthread *curthread = _get_curthread(); int ret = 0; Index: thread/thr_init.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_init.c,v retrieving revision 1.32 diff -u -r1.32 thr_init.c --- thread/thr_init.c 27 Mar 2006 23:50:21 -0000 1.32 +++ thread/thr_init.c 28 Mar 2006 18:41:34 -0000 @@ -35,11 +35,13 @@ #include "namespace.h" #include <sys/types.h> -#include <sys/signalvar.h> #include <sys/ioctl.h> +#include <sys/mman.h> +#include <sys/signalvar.h> #include <sys/sysctl.h> #include <sys/ttycom.h> -#include <sys/mman.h> +#include <sys/ucontext.h> +#include <sys/thr.h> #include <errno.h> #include <fcntl.h> #include <paths.h> @@ -95,10 +97,10 @@ }; pid_t _thr_pid; -int _thr_guard_default; -int _thr_stack_default = THR_STACK_DEFAULT; -int _thr_stack_initial = THR_STACK_INITIAL; -int _thr_page_size; +size_t _thr_guard_default; +size_t _thr_stack_default = THR_STACK_DEFAULT; +size_t _thr_stack_initial = THR_STACK_INITIAL; +size_t _thr_page_size; int _gc_count; umtx_t _mutex_static_lock; umtx_t _cond_static_lock; @@ -389,9 +391,8 @@ * resource limits, so this stack needs an explicitly mapped * red zone to protect the thread stack that is just beyond. */ - if (mmap((void *)_usrstack - _thr_stack_initial - - _thr_guard_default, _thr_guard_default, 0, MAP_ANON, - -1, 0) == MAP_FAILED) + if (mmap((char *)_usrstack - _thr_stack_initial - _thr_guard_default, + _thr_guard_default, 0, MAP_ANON, -1, 0) == MAP_FAILED) PANIC("Cannot allocate red zone for initial thread"); /* @@ -403,7 +404,7 @@ * actually free() it; it just puts it in the free * stack queue for later reuse. */ - thread->attr.stackaddr_attr = (void *)_usrstack - _thr_stack_initial; + thread->attr.stackaddr_attr = (char *)_usrstack - _thr_stack_initial; thread->attr.stacksize_attr = _thr_stack_initial; thread->attr.guardsize_attr = _thr_guard_default; thread->attr.flags |= THR_STACK_USER; Index: thread/thr_join.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_join.c,v retrieving revision 1.20 diff -u -r1.20 thr_join.c --- thread/thr_join.c 19 Dec 2005 03:20:55 -0000 1.20 +++ thread/thr_join.c 28 Mar 2006 18:12:41 -0000 @@ -27,8 +27,11 @@ * */ +#include "namespace.h" #include <errno.h> #include <pthread.h> +#include <pthread_np.h> +#include "un-namespace.h" #include "thr_private.h" Index: thread/thr_kern.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_kern.c,v retrieving revision 1.20 diff -u -r1.20 thr_kern.c --- thread/thr_kern.c 25 Mar 2006 04:49:07 -0000 1.20 +++ thread/thr_kern.c 28 Mar 2006 18:12:41 -0000 @@ -27,9 +27,14 @@ * $FreeBSD: src/lib/libthr/thread/thr_kern.c,v 1.20 2006/03/25 04:49:07 davidxu Exp $ */ +#include "namespace.h" #include <sys/types.h> #include <sys/signalvar.h> +#include <sys/ucontext.h> +#include <sys/thr.h> #include <pthread.h> +#include <signal.h> +#include "un-namespace.h" #include "thr_private.h" @@ -63,7 +68,7 @@ _thr_signal_block(struct pthread *curthread) { sigset_t set; - + if (curthread->sigblock > 0) { curthread->sigblock++; return; Index: thread/thr_kill.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_kill.c,v retrieving revision 1.1 diff -u -r1.1 thr_kill.c --- thread/thr_kill.c 2 Apr 2005 01:20:00 -0000 1.1 +++ thread/thr_kill.c 28 Mar 2006 18:12:41 -0000 @@ -32,9 +32,13 @@ * $FreeBSD: src/lib/libthr/thread/thr_kill.c,v 1.1 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" +#include <sys/types.h> +#include <sys/ucontext.h> #include <errno.h> #include <signal.h> #include <pthread.h> +#include "un-namespace.h" #include "thr_private.h" Index: thread/thr_list.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_list.c,v retrieving revision 1.7 diff -u -r1.7 thr_list.c --- thread/thr_list.c 24 Mar 2006 04:34:06 -0000 1.7 +++ thread/thr_list.c 28 Mar 2006 18:12:41 -0000 @@ -27,15 +27,16 @@ * $FreeBSD: src/lib/libthr/thread/thr_list.c,v 1.7 2006/03/24 04:34:06 davidxu Exp $ */ +#include "namespace.h" #include <sys/types.h> #include <sys/queue.h> - +#include <pthread.h> #include <stdlib.h> #include <string.h> -#include <pthread.h> +#include "un-namespace.h" -#include "thr_private.h" #include "libc_private.h" +#include "thr_private.h" /*#define DEBUG_THREAD_LIST */ #ifdef DEBUG_THREAD_LIST @@ -217,8 +218,10 @@ } static void -thr_destroy(struct pthread *curthread __unused, struct pthread *thread) +thr_destroy(struct pthread *curthread, struct pthread *thread) { + (void)curthread; + free(thread); } @@ -312,6 +315,8 @@ void _thr_ref_delete_unlocked(struct pthread *curthread, struct pthread *thread) { + (void)curthread; + if (thread != NULL) { thread->refcount--; if ((thread->refcount == 0) && thread->state == PS_DEAD && @@ -326,6 +331,8 @@ { struct pthread *pthread; + (void)curthread; + if (thread == NULL) /* Invalid thread: */ return (EINVAL); @@ -334,7 +341,7 @@ if (pthread) { if (include_dead == 0 && pthread->state == PS_DEAD) { pthread = NULL; - } + } } /* Return zero if the thread exists: */ Index: thread/thr_main_np.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_main_np.c,v retrieving revision 1.2 diff -u -r1.2 thr_main_np.c --- thread/thr_main_np.c 2 Apr 2005 01:20:00 -0000 1.2 +++ thread/thr_main_np.c 28 Mar 2006 18:12:41 -0000 @@ -27,8 +27,10 @@ * $FreeBSD: src/lib/libthr/thread/thr_main_np.c,v 1.2 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" #include <pthread.h> #include <pthread_np.h> +#include "un-namespace.h" #include "thr_private.h" @@ -44,5 +46,5 @@ if (!_thr_initial) return (-1); else - return (pthread_equal(pthread_self(), _thr_initial) ? 1 : 0); + return (_pthread_equal(_pthread_self(), _thr_initial) ? 1 : 0); } Index: thread/thr_multi_np.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_multi_np.c,v retrieving revision 1.1 diff -u -r1.1 thr_multi_np.c --- thread/thr_multi_np.c 1 Apr 2003 03:46:29 -0000 1.1 +++ thread/thr_multi_np.c 28 Mar 2006 18:12:41 -0000 @@ -31,8 +31,13 @@ * * $FreeBSD: src/lib/libthr/thread/thr_multi_np.c,v 1.1 2003/04/01 03:46:29 jeff Exp $ */ + +#include "namespace.h" #include <pthread.h> #include <pthread_np.h> +#include "un-namespace.h" + +#include "thr_private.h" __weak_reference(_pthread_multi_np, pthread_multi_np); @@ -45,6 +50,6 @@ * XXX - Do we want to do this? * __is_threaded = 1; */ - pthread_resume_all_np(); + _pthread_resume_all_np(); return (0); } Index: thread/thr_mutex.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_mutex.c,v retrieving revision 1.40 diff -u -r1.40 thr_mutex.c --- thread/thr_mutex.c 27 Mar 2006 23:50:21 -0000 1.40 +++ thread/thr_mutex.c 28 Mar 2006 18:12:42 -0000 @@ -33,12 +33,15 @@ * $FreeBSD: src/lib/libthr/thread/thr_mutex.c,v 1.40 2006/03/27 23:50:21 davidxu Exp $ */ -#include <stdlib.h> -#include <errno.h> -#include <string.h> +#include "namespace.h" #include <sys/param.h> #include <sys/queue.h> +#include <errno.h> #include <pthread.h> +#include <stdlib.h> +#include <string.h> +#include "un-namespace.h" + #include "thr_private.h" #if defined(_PTHREADS_INVARIANTS) @@ -69,6 +72,11 @@ const struct timespec *abstime); static int mutex_unlock_common(pthread_mutex_t *, int); +int __pthread_mutex_init(pthread_mutex_t *, const pthread_mutexattr_t *); +int __pthread_mutex_lock(pthread_mutex_t *); +int __pthread_mutex_timedlock(pthread_mutex_t *, const struct timespec *); +int __pthread_mutex_trylock(pthread_mutex_t *); + __weak_reference(__pthread_mutex_init, pthread_mutex_init); __weak_reference(__pthread_mutex_lock, pthread_mutex_lock); __weak_reference(__pthread_mutex_timedlock, pthread_mutex_timedlock); @@ -465,10 +473,12 @@ { int ret; + (void)curthread; + switch (m->m_type) { case PTHREAD_MUTEX_ERRORCHECK: case PTHREAD_MUTEX_NORMAL: - ret = EBUSY; + ret = EBUSY; break; case PTHREAD_MUTEX_RECURSIVE: @@ -490,10 +500,12 @@ static int mutex_self_lock(struct pthread *curthread, pthread_mutex_t m, - const struct timespec *abstime) + const struct timespec *abstime) { struct timespec ts1, ts2; - int ret; + int ret; + + (void)curthread; switch (m->m_type) { case PTHREAD_MUTEX_ERRORCHECK: @@ -507,7 +519,7 @@ * POSIX specifies that mutexes should return * EDEADLK if a recursive lock is detected. */ - ret = EDEADLK; + ret = EDEADLK; } break; @@ -599,10 +611,12 @@ int _pthread_mutex_getprioceiling(pthread_mutex_t *mutex, - int *prioceiling) + int *prioceiling) { int ret; + (void)prioceiling; + if (*mutex == NULL) ret = EINVAL; else if ((*mutex)->m_protocol != PTHREAD_PRIO_PROTECT) @@ -615,7 +629,7 @@ int _pthread_mutex_setprioceiling(pthread_mutex_t *mutex, - int prioceiling, int *old_ceiling) + int prioceiling, int *old_ceiling) { int ret = 0; int tmp; @@ -624,10 +638,10 @@ ret = EINVAL; else if ((*mutex)->m_protocol != PTHREAD_PRIO_PROTECT) ret = EINVAL; - else if ((ret = pthread_mutex_lock(mutex)) == 0) { + else if ((ret = _pthread_mutex_lock(mutex)) == 0) { tmp = (*mutex)->m_prio; (*mutex)->m_prio = prioceiling; - ret = pthread_mutex_unlock(mutex); + ret = _pthread_mutex_unlock(mutex); /* Return the old ceiling. */ *old_ceiling = tmp; Index: thread/thr_mutex_prioceiling.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_mutex_prioceiling.c,v retrieving revision 1.4 diff -u -r1.4 thr_mutex_prioceiling.c --- thread/thr_mutex_prioceiling.c 2 Apr 2005 01:20:00 -0000 1.4 +++ thread/thr_mutex_prioceiling.c 28 Mar 2006 18:12:42 -0000 @@ -32,10 +32,13 @@ * $FreeBSD: src/lib/libthr/thread/thr_mutex_prioceiling.c,v 1.4 2005/04/02 01:20:00 davidxu Exp $ */ -#include <string.h> -#include <stdlib.h> +#include "namespace.h" #include <errno.h> #include <pthread.h> +#include <stdlib.h> +#include <string.h> +#include "un-namespace.h" + #include "thr_private.h" __weak_reference(_pthread_mutexattr_getprioceiling, pthread_mutexattr_getprioceiling); Index: thread/thr_mutex_protocol.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_mutex_protocol.c,v retrieving revision 1.3 diff -u -r1.3 thr_mutex_protocol.c --- thread/thr_mutex_protocol.c 2 Apr 2005 01:20:00 -0000 1.3 +++ thread/thr_mutex_protocol.c 28 Mar 2006 18:12:42 -0000 @@ -32,10 +32,13 @@ * $FreeBSD: src/lib/libthr/thread/thr_mutex_protocol.c,v 1.3 2005/04/02 01:20:00 davidxu Exp $ */ -#include <string.h> -#include <stdlib.h> +#include "namespace.h" #include <errno.h> #include <pthread.h> +#include <stdlib.h> +#include <string.h> +#include "un-namespace.h" + #include "thr_private.h" __weak_reference(_pthread_mutexattr_getprotocol, pthread_mutexattr_getprotocol); Index: thread/thr_mutexattr.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_mutexattr.c,v retrieving revision 1.4 diff -u -r1.4 thr_mutexattr.c --- thread/thr_mutexattr.c 27 Mar 2006 23:50:21 -0000 1.4 +++ thread/thr_mutexattr.c 28 Mar 2006 18:12:42 -0000 @@ -65,10 +65,14 @@ * */ -#include <string.h> -#include <stdlib.h> +#include "namespace.h" #include <errno.h> #include <pthread.h> +#include <pthread_np.h> +#include <stdlib.h> +#include <string.h> +#include "un-namespace.h" + #include "thr_private.h" __weak_reference(_pthread_mutexattr_init, pthread_mutexattr_init); @@ -90,12 +94,10 @@ int ret; pthread_mutexattr_t pattr; - if ((pattr = (pthread_mutexattr_t) - malloc(sizeof(struct pthread_mutex_attr))) == NULL) { + if ((pattr = malloc(sizeof(*pattr))) == NULL) { ret = ENOMEM; } else { - memcpy(pattr, &_pthread_mutexattr_default, - sizeof(struct pthread_mutex_attr)); + memcpy(pattr, &_pthread_mutexattr_default, sizeof(*pattr)); *attr = pattr; ret = 0; } Index: thread/thr_printf.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_printf.c,v retrieving revision 1.5 diff -u -r1.5 thr_printf.c --- thread/thr_printf.c 2 Apr 2005 01:20:00 -0000 1.5 +++ thread/thr_printf.c 28 Mar 2006 18:12:42 -0000 @@ -26,10 +26,12 @@ * $FreeBSD: src/lib/libthr/thread/thr_printf.c,v 1.5 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" +#include <pthread.h> #include <stdarg.h> #include <string.h> #include <unistd.h> -#include <pthread.h> +#include "un-namespace.h" #include "thr_private.h" Index: thread/thr_private.h =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_private.h,v retrieving revision 1.59 diff -u -r1.59 thr_private.h --- thread/thr_private.h 27 Mar 2006 23:50:21 -0000 1.59 +++ thread/thr_private.h 28 Mar 2006 18:41:51 -0000 @@ -32,29 +32,12 @@ #ifndef _THR_PRIVATE_H #define _THR_PRIVATE_H -/* - * Include files. - */ -#include <sys/types.h> -#include <sys/time.h> -#include <sys/cdefs.h> -#include <sys/queue.h> -#include <machine/atomic.h> -#include <errno.h> -#include <limits.h> -#include <signal.h> -#include <stddef.h> -#include <stdio.h> -#include <sched.h> -#include <unistd.h> -#include <ucontext.h> -#include <sys/thr.h> -#include <pthread.h> - #ifndef __hidden #define __hidden __attribute__((visibility("hidden"))) #endif +#include <sys/queue.h> + #include "pthread_md.h" #include "thr_umtx.h" #include "thread_db.h" @@ -68,11 +51,15 @@ /* * Kernel fatal error handler macro. */ -#define PANIC(string) _thread_exit(__FILE__,__LINE__,string) +#define PANIC(string) _thread_exit(__FILE__, __LINE__, string) /* Output debug messages like this: */ -#define stdout_debug(args...) _thread_printf(STDOUT_FILENO, ##args) -#define stderr_debug(args...) _thread_printf(STDOUT_FILENO, ##args) +#ifdef STDOUT_FILENO +#define stdout_debug(...) _thread_printf(STDOUT_FILENO, __VA_ARGS__) +#endif +#ifdef STDERR_FILENO +#define stderr_debug(...) _thread_printf(STDERR_FILENO, __VA_ARGS__) +#endif #ifdef _PTHREADS_INVARIANTS #define THR_ASSERT(cond, msg) do { \ @@ -203,7 +190,7 @@ */ struct pthread_cleanup { struct pthread_cleanup *next; - void (*routine)(); + void (*routine)(void *); void *routine_arg; int onstack; }; @@ -239,7 +226,7 @@ #define THR_STACK_USER 0x100 /* 0xFF reserved for <pthread.h> */ int flags; void *arg_attr; - void (*cleanup_attr)(); + void (*cleanup_attr)(void *); void *stackaddr_attr; size_t stacksize_attr; size_t guardsize_attr; @@ -625,10 +612,10 @@ extern struct pthread_cond_attr _pthread_condattr_default __hidden; extern pid_t _thr_pid __hidden; -extern int _thr_guard_default __hidden; -extern int _thr_stack_default __hidden; -extern int _thr_stack_initial __hidden; -extern int _thr_page_size __hidden; +extern size_t _thr_guard_default __hidden; +extern size_t _thr_stack_default __hidden; +extern size_t _thr_stack_initial __hidden; +extern size_t _thr_page_size __hidden; /* Garbage thread count. */ extern int _gc_count __hidden; @@ -650,37 +637,11 @@ void _mutex_fork(struct pthread *curthread) __hidden; void _mutex_unlock_private(struct pthread *) __hidden; void _libpthread_init(struct pthread *) __hidden; -void *_pthread_getspecific(pthread_key_t); -int _pthread_cond_init(pthread_cond_t *, const pthread_condattr_t *); -int _pthread_cond_destroy(pthread_cond_t *); -int _pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *); -int _pthread_cond_timedwait(pthread_cond_t *, pthread_mutex_t *, - const struct timespec *); -int _pthread_cond_signal(pthread_cond_t *); -int _pthread_cond_broadcast(pthread_cond_t *); int _pthread_create(pthread_t * thread, const pthread_attr_t * attr, void *(*start_routine) (void *), void *arg); -int _pthread_key_create(pthread_key_t *, void (*) (void *)); -int _pthread_key_delete(pthread_key_t); -int _pthread_mutex_destroy(pthread_mutex_t *); -int _pthread_mutex_init(pthread_mutex_t *, const pthread_mutexattr_t *); -int _pthread_mutex_lock(pthread_mutex_t *); -int _pthread_mutex_trylock(pthread_mutex_t *); -int _pthread_mutex_unlock(pthread_mutex_t *); -int _pthread_mutexattr_init(pthread_mutexattr_t *); -int _pthread_mutexattr_destroy(pthread_mutexattr_t *); -int _pthread_mutexattr_settype(pthread_mutexattr_t *, int); -int _pthread_once(pthread_once_t *, void (*) (void)); -int _pthread_rwlock_init(pthread_rwlock_t *, const pthread_rwlockattr_t *); -int _pthread_rwlock_destroy (pthread_rwlock_t *); -struct pthread *_pthread_self(void); -int _pthread_setspecific(pthread_key_t, const void *); -void _pthread_testcancel(void); void _pthread_yield(void); -void _pthread_cleanup_push(void (*routine) (void *), void *routine_arg); -void _pthread_cleanup_pop(int execute); struct pthread *_thr_alloc(struct pthread *) __hidden; -void _thread_exit(char *, int, char *) __hidden __dead2; +void _thread_exit(const char *, int, const char *) __hidden __dead2; void _thr_exit_cleanup(void) __hidden; int _thr_ref_add(struct pthread *, struct pthread *, int) __hidden; void _thr_ref_delete(struct pthread *, struct pthread *) __hidden; @@ -718,6 +679,7 @@ void _thr_report_death(struct pthread *curthread) __hidden; void _thread_bp_create(void); void _thread_bp_death(void); +void _thread_seterrno(pthread_t, int); /* #include <sys/aio.h> */ #ifdef _SYS_AIO_H_ Index: thread/thr_pspinlock.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_pspinlock.c,v retrieving revision 1.1 diff -u -r1.1 thr_pspinlock.c --- thread/thr_pspinlock.c 2 Apr 2005 01:20:00 -0000 1.1 +++ thread/thr_pspinlock.c 28 Mar 2006 18:12:42 -0000 @@ -26,9 +26,12 @@ * $FreeBSD: src/lib/libthr/thread/thr_pspinlock.c,v 1.1 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" #include <errno.h> #include <stdlib.h> #include <pthread.h> +#include "un-namespace.h" + #include "thr_private.h" #define SPIN_COUNT 100000 Index: thread/thr_resume_np.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_resume_np.c,v retrieving revision 1.9 diff -u -r1.9 thr_resume_np.c --- thread/thr_resume_np.c 5 Jan 2006 13:51:22 -0000 1.9 +++ thread/thr_resume_np.c 28 Mar 2006 18:12:42 -0000 @@ -32,8 +32,11 @@ * $FreeBSD: src/lib/libthr/thread/thr_resume_np.c,v 1.9 2006/01/05 13:51:22 davidxu Exp $ */ +#include "namespace.h" #include <errno.h> #include <pthread.h> +#include <pthread_np.h> +#include "un-namespace.h" #include "thr_private.h" Index: thread/thr_rtld.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_rtld.c,v retrieving revision 1.2 diff -u -r1.2 thr_rtld.c --- thread/thr_rtld.c 25 Mar 2006 05:14:21 -0000 1.2 +++ thread/thr_rtld.c 28 Mar 2006 18:13:54 -0000 @@ -30,8 +30,10 @@ /* * A lockless rwlock for rtld. */ -#include <sys/cdefs.h> + +#include "namespace.h" #include <stdlib.h> +#include "un-namespace.h" #include "rtld_lock.h" #include "thr_private.h" @@ -167,6 +169,8 @@ static int _thr_rtld_set_flag(int mask) { + (void)mask; + /* * The caller's code in rtld-elf is broken, it is not signal safe, * just return zero to fool it. @@ -177,6 +181,8 @@ static int _thr_rtld_clr_flag(int mask) { + (void)mask; + return (0); } @@ -190,7 +196,7 @@ curthread = _get_curthread(); /* force to resolve _umtx_op PLT */ - _umtx_op((struct umtx *)&dummy, UMTX_OP_WAKE, 1, 0, 0); + _umtx_op((struct umtx *)(void *)&dummy, UMTX_OP_WAKE, 1, 0, 0); li.lock_create = _thr_rtld_lock_create; li.lock_destroy = _thr_rtld_lock_destroy; Index: thread/thr_rwlock.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_rwlock.c,v retrieving revision 1.8 diff -u -r1.8 thr_rwlock.c --- thread/thr_rwlock.c 2 Apr 2005 01:20:00 -0000 1.8 +++ thread/thr_rwlock.c 28 Mar 2006 18:12:42 -0000 @@ -26,13 +26,13 @@ * $FreeBSD: src/lib/libthr/thread/thr_rwlock.c,v 1.8 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" #include <errno.h> #include <limits.h> -#include <stdlib.h> - -#include "namespace.h" #include <pthread.h> +#include <stdlib.h> #include "un-namespace.h" + #include "thr_private.h" /* maximum number of times a read lock may be obtained */ @@ -58,6 +58,8 @@ pthread_rwlock_t prwlock; int ret; + (void)attr; + /* allocate rwlock object */ prwlock = (pthread_rwlock_t)malloc(sizeof(struct pthread_rwlock)); Index: thread/thr_rwlockattr.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_rwlockattr.c,v retrieving revision 1.1 diff -u -r1.1 thr_rwlockattr.c --- thread/thr_rwlockattr.c 1 Apr 2003 03:46:29 -0000 1.1 +++ thread/thr_rwlockattr.c 28 Mar 2006 18:12:42 -0000 @@ -26,10 +26,12 @@ * $FreeBSD: src/lib/libthr/thread/thr_rwlockattr.c,v 1.1 2003/04/01 03:46:29 jeff Exp $ */ +#include "namespace.h" #include <errno.h> +#include <pthread.h> #include <stdlib.h> +#include "un-namespace.h" -#include <pthread.h> #include "thr_private.h" __weak_reference(_pthread_rwlockattr_destroy, pthread_rwlockattr_destroy); Index: thread/thr_self.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_self.c,v retrieving revision 1.3 diff -u -r1.3 thr_self.c --- thread/thr_self.c 2 Apr 2005 01:20:00 -0000 1.3 +++ thread/thr_self.c 28 Mar 2006 18:12:42 -0000 @@ -32,7 +32,9 @@ * $FreeBSD: src/lib/libthr/thread/thr_self.c,v 1.3 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" #include <pthread.h> +#include "un-namespace.h" #include "thr_private.h" Index: thread/thr_sem.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_sem.c,v retrieving revision 1.7 diff -u -r1.7 thr_sem.c --- thread/thr_sem.c 28 Mar 2006 21:46:55 -0000 1.7 +++ thread/thr_sem.c 29 Mar 2006 05:53:54 -0000 @@ -36,10 +36,10 @@ #include <errno.h> #include <fcntl.h> #include <pthread.h> +#include <_semaphore.h> #include <semaphore.h> #include <stdlib.h> #include <time.h> -#include <_semaphore.h> #include "un-namespace.h" #include "thr_private.h" @@ -76,7 +76,7 @@ return (NULL); } - sem = (sem_t)malloc(sizeof(struct sem)); + sem = malloc(sizeof(*sem)); if (sem == NULL) { errno = ENOSPC; return (NULL); Index: thread/thr_seterrno.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_seterrno.c,v retrieving revision 1.2 diff -u -r1.2 thr_seterrno.c --- thread/thr_seterrno.c 2 Apr 2005 01:20:00 -0000 1.2 +++ thread/thr_seterrno.c 28 Mar 2006 18:12:42 -0000 @@ -32,13 +32,15 @@ * $FreeBSD: src/lib/libthr/thread/thr_seterrno.c,v 1.2 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" #include <pthread.h> +#include "un-namespace.h" #include "thr_private.h" /* * This function needs to reference the global error variable which is - * normally hidden from the user. + * normally hidden from the user. */ #undef errno extern int errno; @@ -53,7 +55,7 @@ else /* * Threads other than the initial thread always use the error - * field in the thread structureL + * field in the thread structure */ thread->error = error; } Index: thread/thr_setprio.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_setprio.c,v retrieving revision 1.1 diff -u -r1.1 thr_setprio.c --- thread/thr_setprio.c 1 Apr 2003 03:46:29 -0000 1.1 +++ thread/thr_setprio.c 28 Mar 2006 18:14:25 -0000 @@ -31,7 +31,11 @@ * * $FreeBSD: src/lib/libthr/thread/thr_setprio.c,v 1.1 2003/04/01 03:46:29 jeff Exp $ */ + +#include "namespace.h" #include <pthread.h> +#include "un-namespace.h" + #include "thr_private.h" __weak_reference(_pthread_setprio, pthread_setprio); @@ -42,9 +46,9 @@ int ret, policy; struct sched_param param; - if ((ret = pthread_getschedparam(pthread, &policy, ¶m)) == 0) { + if ((ret = _pthread_getschedparam(pthread, &policy, ¶m)) == 0) { param.sched_priority = prio; - ret = pthread_setschedparam(pthread, policy, ¶m); + ret = _pthread_setschedparam(pthread, policy, ¶m); } /* Return the error status: */ Index: thread/thr_setschedparam.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_setschedparam.c,v retrieving revision 1.10 diff -u -r1.10 thr_setschedparam.c --- thread/thr_setschedparam.c 27 Mar 2006 23:50:21 -0000 1.10 +++ thread/thr_setschedparam.c 28 Mar 2006 18:12:42 -0000 @@ -32,9 +32,11 @@ * $FreeBSD: src/lib/libthr/thread/thr_setschedparam.c,v 1.10 2006/03/27 23:50:21 davidxu Exp $ */ -#include <errno.h> +#include "namespace.h" #include <sys/param.h> +#include <errno.h> #include <pthread.h> +#include "un-namespace.h" #include "thr_private.h" @@ -45,7 +47,7 @@ * in kernel, doing it in userland is no-op. */ int -_pthread_setschedparam(pthread_t pthread, int policy, +_pthread_setschedparam(pthread_t pthread, int policy, const struct sched_param *param) { struct pthread *curthread = _get_curthread(); Index: thread/thr_sig.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_sig.c,v retrieving revision 1.17 diff -u -r1.17 thr_sig.c --- thread/thr_sig.c 26 Mar 2006 01:57:03 -0000 1.17 +++ thread/thr_sig.c 28 Mar 2006 18:40:17 -0000 @@ -26,15 +26,17 @@ * $FreeBSD: src/lib/libthr/thread/thr_sig.c,v 1.17 2006/03/26 01:57:03 davidxu Exp $ */ +#include "namespace.h" #include <sys/param.h> -#include <sys/types.h> #include <sys/signalvar.h> -#include <signal.h> +#include <sys/ucontext.h> #include <errno.h> #include <fcntl.h> -#include <unistd.h> -#include <string.h> #include <pthread.h> +#include <signal.h> +#include <string.h> +#include <unistd.h> +#include "un-namespace.h" #include "thr_private.h" @@ -205,6 +207,11 @@ return (ret); } +int __sigwait(const sigset_t *, int *); +int __sigtimedwait(const sigset_t *, siginfo_t *, + const struct timespec *); +int __sigwaitinfo(const sigset_t *, siginfo_t *); + __weak_reference(__sigwait, sigwait); __weak_reference(__sigtimedwait, sigtimedwait); __weak_reference(__sigwaitinfo, sigwaitinfo); Index: thread/thr_sigmask.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_sigmask.c,v retrieving revision 1.1 diff -u -r1.1 thr_sigmask.c --- thread/thr_sigmask.c 2 Apr 2005 01:20:00 -0000 1.1 +++ thread/thr_sigmask.c 28 Mar 2006 18:12:42 -0000 @@ -32,9 +32,12 @@ * $FreeBSD: src/lib/libthr/thread/thr_sigmask.c,v 1.1 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" #include <errno.h> #include <signal.h> #include <pthread.h> +#include "un-namespace.h" + #include "thr_private.h" __weak_reference(_pthread_sigmask, pthread_sigmask); Index: thread/thr_single_np.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_single_np.c,v retrieving revision 1.1 diff -u -r1.1 thr_single_np.c --- thread/thr_single_np.c 2 Apr 2005 01:20:00 -0000 1.1 +++ thread/thr_single_np.c 28 Mar 2006 18:16:18 -0000 @@ -32,8 +32,10 @@ * $FreeBSD: src/lib/libthr/thread/thr_single_np.c,v 1.1 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" #include <pthread.h> #include <pthread_np.h> +#include "un-namespace.h" __weak_reference(_pthread_single_np, pthread_single_np); @@ -41,7 +43,7 @@ { /* Enter single-threaded (non-POSIX) scheduling mode: */ - pthread_suspend_all_np(); + _pthread_suspend_all_np(); /* * XXX - Do we want to do this? * __is_threaded = 0; Index: thread/thr_spec.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_spec.c,v retrieving revision 1.3 diff -u -r1.3 thr_spec.c --- thread/thr_spec.c 2 Apr 2005 01:20:00 -0000 1.3 +++ thread/thr_spec.c 28 Mar 2006 18:19:36 -0000 @@ -32,11 +32,16 @@ * $FreeBSD: src/lib/libthr/thread/thr_spec.c,v 1.3 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" +#include <sys/types.h> +#include <sys/ucontext.h> +#include <errno.h> +#include <pthread.h> #include <signal.h> #include <stdlib.h> #include <string.h> -#include <errno.h> -#include <pthread.h> +#include <unistd.h> +#include "un-namespace.h" #include "thr_private.h" @@ -98,7 +103,7 @@ return (ret); } -void +void _thread_cleanupspecific(void) { struct pthread *curthread = _get_curthread(); @@ -168,7 +173,7 @@ return (new_data); } -int +int _pthread_setspecific(pthread_key_t key, const void *value) { struct pthread *pthread; @@ -218,7 +223,7 @@ } else { /* * This key has not been used before, so return NULL - * instead: + * instead: */ data = NULL; } Index: thread/thr_spinlock.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_spinlock.c,v retrieving revision 1.12 diff -u -r1.12 thr_spinlock.c --- thread/thr_spinlock.c 13 Jan 2006 06:14:04 -0000 1.12 +++ thread/thr_spinlock.c 28 Mar 2006 18:19:50 -0000 @@ -33,10 +33,11 @@ * */ +#include "namespace.h" #include <sys/types.h> -#include <pthread.h> -#include <libc_private.h> #include <spinlock.h> +#include <unistd.h> +#include "un-namespace.h" #include "thr_private.h" @@ -83,6 +84,8 @@ void _spinlock_debug(spinlock_t *lck, char *fname, int lineno) { + (void)fname; + (void)lineno; _spinlock(lck); } Index: thread/thr_stack.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_stack.c,v retrieving revision 1.6 diff -u -r1.6 thr_stack.c --- thread/thr_stack.c 2 Apr 2005 01:20:00 -0000 1.6 +++ thread/thr_stack.c 28 Mar 2006 18:43:35 -0000 @@ -27,11 +27,13 @@ * $FreeBSD: src/lib/libthr/thread/thr_stack.c,v 1.6 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" #include <sys/types.h> #include <sys/mman.h> #include <sys/queue.h> #include <stdlib.h> #include <pthread.h> +#include "un-namespace.h" #include "thr_private.h" @@ -189,11 +191,11 @@ else { /* Allocate a stack from usrstack. */ if (last_stack == NULL) - last_stack = _usrstack - _thr_stack_initial - + last_stack = (char *)_usrstack - _thr_stack_initial - _thr_guard_default; /* Allocate a new stack. */ - stackaddr = last_stack - stacksize - guardsize; + stackaddr = (char *)last_stack - stacksize - guardsize; /* * Even if stack allocation fails, we don't want to try to @@ -202,7 +204,7 @@ * likely reason for an mmap() error is a stack overflow of * the adjacent thread stack. */ - last_stack -= (stacksize + guardsize); + last_stack = (char *)last_stack - (stacksize + guardsize); /* Release the lock before mmap'ing it. */ THREAD_LIST_UNLOCK(curthread); @@ -236,8 +238,8 @@ if ((attr != NULL) && ((attr->flags & THR_STACK_USER) == 0) && (attr->stackaddr_attr != NULL)) { - spare_stack = (attr->stackaddr_attr + attr->stacksize_attr - - sizeof(struct stack)); + spare_stack = (struct stack *)((char *)attr->stackaddr_attr + + attr->stacksize_attr - sizeof(struct stack)); spare_stack->stacksize = round_up(attr->stacksize_attr); spare_stack->guardsize = round_up(attr->guardsize_attr); spare_stack->stackaddr = attr->stackaddr_attr; Index: thread/thr_suspend_np.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_suspend_np.c,v retrieving revision 1.6 diff -u -r1.6 thr_suspend_np.c --- thread/thr_suspend_np.c 20 Feb 2006 09:02:40 -0000 1.6 +++ thread/thr_suspend_np.c 28 Mar 2006 18:28:48 -0000 @@ -32,8 +32,14 @@ * $FreeBSD: src/lib/libthr/thread/thr_suspend_np.c,v 1.6 2006/02/20 09:02:40 davidxu Exp $ */ +#include "namespace.h" +#include <sys/types.h> +#include <sys/ucontext.h> +#include <sys/thr.h> #include <errno.h> #include <pthread.h> +#include <pthread_np.h> +#include "un-namespace.h" #include "thr_private.h" @@ -55,8 +61,7 @@ ret = EDEADLK; /* Add a reference to the thread: */ - else if ((ret = _thr_ref_add(curthread, thread, /*include dead*/0)) - == 0) { + else if ((ret = _thr_ref_add(curthread, thread, 0)) == 0) { /* Lock the threads scheduling queue: */ THR_THREAD_LOCK(curthread, thread); suspend_common(curthread, thread, 1); Index: thread/thr_switch_np.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_switch_np.c,v retrieving revision 1.1 diff -u -r1.1 thr_switch_np.c --- thread/thr_switch_np.c 2 Apr 2005 01:20:00 -0000 1.1 +++ thread/thr_switch_np.c 28 Mar 2006 18:12:42 -0000 @@ -32,9 +32,11 @@ * $FreeBSD: src/lib/libthr/thread/thr_switch_np.c,v 1.1 2005/04/02 01:20:00 davidxu Exp $ */ +#include "namespace.h" #include <errno.h> #include <pthread.h> #include <pthread_np.h> +#include "un-namespace.h" #include "thr_private.h" @@ -45,11 +47,13 @@ int _pthread_switch_add_np(pthread_switch_routine_t routine) { + (void)routine; return (ENOTSUP); } int _pthread_switch_delete_np(pthread_switch_routine_t routine) { + (void)routine; return (ENOTSUP); } Index: thread/thr_symbols.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_symbols.c,v retrieving revision 1.3 diff -u -r1.3 thr_symbols.c --- thread/thr_symbols.c 1 Sep 2005 15:21:23 -0000 1.3 +++ thread/thr_symbols.c 28 Mar 2006 18:12:42 -0000 @@ -32,10 +32,12 @@ * $FreeBSD: src/lib/libthr/thread/thr_symbols.c,v 1.3 2005/09/01 15:21:23 stefanf Exp $ */ +#include "namespace.h" #include <sys/types.h> #include <stddef.h> #include <pthread.h> #include <rtld.h> +#include "un-namespace.h" #include "thr_private.h" Index: thread/thr_syscalls.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_syscalls.c,v retrieving revision 1.12 diff -u -r1.12 thr_syscalls.c --- thread/thr_syscalls.c 2 Nov 2005 14:06:29 -0000 1.12 +++ thread/thr_syscalls.c 28 Mar 2006 18:21:30 -0000 @@ -64,6 +64,7 @@ * */ +#include "namespace.h" #include <sys/types.h> #include <sys/mman.h> #include <sys/param.h> @@ -72,6 +73,7 @@ #include <sys/socket.h> #include <sys/stat.h> #include <sys/time.h> +#include <sys/ucontext.h> #include <sys/uio.h> #include <sys/wait.h> #include <aio.h> @@ -87,6 +89,7 @@ #include <termios.h> #include <unistd.h> #include <pthread.h> +#include "un-namespace.h" #include "thr_private.h" Index: thread/thr_umtx.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_umtx.c,v retrieving revision 1.1 diff -u -r1.1 thr_umtx.c --- thread/thr_umtx.c 2 Apr 2005 01:20:00 -0000 1.1 +++ thread/thr_umtx.c 28 Mar 2006 18:12:42 -0000 @@ -43,10 +43,10 @@ const struct timespec *timeout) { if (timeout && (timeout->tv_sec < 0 || (timeout->tv_sec == 0 && - timeout->tv_nsec <= 0))) + timeout->tv_nsec <= 0))) return (ETIMEDOUT); if (_umtx_op((struct umtx *)mtx, UMTX_OP_LOCK, id, 0, - (void *)timeout) == 0) + __DECONST(void *, timeout)) == 0) return (0); return (errno); } @@ -63,10 +63,9 @@ _thr_umtx_wait(volatile umtx_t *mtx, long id, const struct timespec *timeout) { if (timeout && (timeout->tv_sec < 0 || (timeout->tv_sec == 0 && - timeout->tv_nsec <= 0))) + timeout->tv_nsec <= 0))) return (ETIMEDOUT); - if (_umtx_op((struct umtx *)mtx, UMTX_OP_WAIT, id, 0, - (void*) timeout) == 0) + if (_umtx_op((struct umtx *)mtx, UMTX_OP_WAIT, id, 0, __DECONST(void *, timeout)) == 0) return (0); return (errno); } Index: thread/thr_umtx.h =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_umtx.h,v retrieving revision 1.3 diff -u -r1.3 thr_umtx.h --- thread/thr_umtx.h 21 Dec 2005 03:53:29 -0000 1.3 +++ thread/thr_umtx.h 28 Mar 2006 18:12:42 -0000 @@ -29,6 +29,9 @@ #ifndef _THR_FBSD_UMTX_H_ #define _THR_FBSD_UMTX_H_ +#include <sys/cdefs.h> +#include <machine/atomic.h> +#include <sys/errno.h> #include <sys/umtx.h> typedef long umtx_t; Index: thread/thr_yield.c =================================================================== RCS file: /home/ncvs/src/lib/libthr/thread/thr_yield.c,v retrieving revision 1.1 diff -u -r1.1 thr_yield.c --- thread/thr_yield.c 1 Apr 2003 03:46:29 -0000 1.1 +++ thread/thr_yield.c 28 Mar 2006 18:12:42 -0000 @@ -31,7 +31,11 @@ * * $FreeBSD: src/lib/libthr/thread/thr_yield.c,v 1.1 2003/04/01 03:46:29 jeff Exp $ */ + +#include "namespace.h" #include <pthread.h> +#include "un-namespace.h" + #include "thr_private.h" __weak_reference(_pthread_yield, pthread_yield); --=-=-=--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86slp1u4qb.fsf>