Date: Fri, 19 Aug 2005 20:35:10 +0200 From: Stefan Farfeleder <stefanf@FreeBSD.org> To: Bruce Evans <bde@zeta.org.au> Cc: threads@FreeBSD.org, standards@FreeBSD.org Subject: Re: <pthread.h> includes Message-ID: <20050819183507.GE77069@wombat.fafoe.narf.at> In-Reply-To: <20050819231640.E2640@epsplex.bde.org> References: <20050819093649.GU21905@wombat.fafoe.narf.at> <20050819231640.E2640@epsplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
[threads@ added] On Sat, Aug 20, 2005 at 12:04:56AM +1000, Bruce Evans wrote: > On Fri, 19 Aug 2005, Stefan Farfeleder wrote: > > >I think some of the headers included by <pthread.h> violate the POSIX > >specification (I'm looking at SUSv3/POSIX 1003.1 2004) by making more > >symbols visible than allowed. > > > ><sys/cdefs.h> Ok > ><sys/types.h> Ok > ><sys/_pthreadtypes.h> Ok > ><sys/time.h> No? (POSIX allows <time.h> which is a subset) ^^^^^^ Actually POSIX kind of requires the inclusion of <time.h> (and <sched.h>). At least all symbols must be visible. > ><sys/signal.h> No? > ><limits.h> No? > ><sched.h> Ok > > > >Is this correct? Should it be fixed? > > All of these includes except <sys/cdefs.h> and <sys/pthreadtypes.h> are > wrong IMO: > > <sys/cdefs.h> needed, but can be obtained as a side effect > of including almost any other header in the list. > <sys/types.h> only used to declare size_t. We handle this better > in many other headers. The old draft of POSIX that > I'm looking at doesn't say that <pthread.h> declares > size_t, so it might be conformant to use __size_t > in the prototypes. Removed, size_t is obtained via <time.h>. > <sys/_pthreadtypes.h> Ok > <sys/time.h> only used to declare sigset_t and struct timespec. > We have a whole header, <sys/_sigset.h>, to help > declare sigset_t better (it only declares > __sigset_t), > and use it in many other headers. We have 2 headers, > <sys/timespec.h> and <sys/_timespec.h>, just to > declare struct timespec, and use them in many other > headers. Here we only need a forward declaration of > struct timespec or maybe struct __timespec, modulo > POSIX bugs. It is a bug in POSIX that <time.h> is > allowed. The old draft of POSIX doesn't say that > <pthread.h> declares sigset_t or struct timespec > (just that it may declare the latter). This is > unlike what it says for other headers. E.g., we > use <sys/timespec.h> in <sys/select.h> to satisfy > the POSIX mistake that a complete struct timespec > must be declared there. I've include <machine/_types.h> (for __uint32_t) and <sys/_sigset.h> instead. timespec is declared through <time.h>. > <sys/signal.h> Just namespace pollution. We need MINSIGSTKSZ from <machine/signal.h> though. The patch includes that header instead and protects its usage with __XSI_VISIBLE. I'm not happy with this, maybe MINSIGSTKSZ should be moved somewhere else? > <limits.h> Just namespace pollution. <machine/_limits.h> is included instead and __ULONG_MAX is used. > <sched.h> only used to declare struct sched_param and to > satisfy a POSIX mistake. A forward declaration > would suffice. Left because POSIX says so. The patch for <pthread.h> is at http://people.freebsd.org/~stefanf/pthread.h.diff . There are a few files that need <sys/types>, <limits.h>, etc symbols and get them by <pthread.h> inclusion, the patch at http://people.freebsd.org/~stefanf/pthread.h-2.diff fixes that. It should probably be committed anyway. Stefan
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050819183507.GE77069>