[kaffe] unix-pthreads broken on sunos
Dalibor Topic
robilad@kaffe.org
Mon May 31 10:46:02 2004
Ciao Riccardo,
thanks for the bug report.
Riccardo wrote:
> Building kaffe with pthreads on solaris (sunos 5.6) fails:
>
> In file included from ../../../../../kaffe/kaffe/kaffevm/systems/unix-
> pthreads/syscalls.c:21:
> <cut>
> ./../../../../kaffe/kaffe/kaffevm/systems/unix-pthreads/thread-impl.c:
> At top level:
> ./../../../../kaffe/kaffe/kaffevm/systems/unix-pthreads/thread-impl.c:
> 207: warning: no previous prototype for `tDump'
> ./../../../../kaffe/kaffe/kaffevm/systems/unix-pthreads/thread-impl.c:
> 249: warning: no previous prototype for `dump_signal_handler'
> <cut>
> ./../../../../kaffe/kaffe/kaffevm/systems/unix-pthreads/thread-impl.c:
> In function `tRun':
> ./../../../../kaffe/kaffe/kaffevm/systems/unix-pthreads/thread-impl.c:
> 594: error: `PTHREAD_THREADS_MAX' undeclared (first use in this function)
Ouch, it seems like Solaris is not POSIX[1] conforming there. Oh well.
It should be in limits.h, according to the POSIX standard. But judging
by [2] it seems like solaris does its own thing. Own thing being that
solaris has no limit in theory, but it has one practice. Nevertheless,
it doesn't want to provide the programmer with useful information
regarding such limits, so our best bet is to use
_POSIX_THREAD_THREADS_MAX [3] for systems that don't define
`PTHREAD_THREADS_MAX'. It's the minimum value, though.
On the other hand, I'm wondering why we have to check for the pthread
max anyway, since my understanding of pthread_create [4] is that it will
return EAGAIN on failure, so we could simply use that on all systems, no?
I'll write a patch that does that, and give it a spin on linux.
cheers,
dalibor topic
[1] http://www.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html
[2] http://www.netsys.com/cgi-bin/solaris9?sysconf(3C)
[3] Keep off the '_', POSIX. Someone on the POSIX standards body should
read http://oakroadsystems.com/tech/c-predef.htm.
[4] http://www.opengroup.org/onlinepubs/007908799/xsh/pthread_create.html