cvs commit: ports/java/jdk14 Makefile ports/java/jdk14/files
patch-vm::os_bsd.hpp
Brian Fundakowski Feldman
green at FreeBSD.org
Wed Oct 20 16:29:40 PDT 2004
On Wed, Oct 20, 2004 at 11:22:56PM +0000, Brian Feldman wrote:
> green 2004-10-20 23:22:56 UTC
>
> FreeBSD ports repository
>
> Modified files:
> java/jdk14 Makefile
> Added files:
> java/jdk14/files patch-vm::os_bsd.hpp
> Log:
> The BSD patchset for the Sun JDK modeled its thread behavior mostly after
> existing the Solaris base, and similarly to what happened with NSPR, made
> a bad assumption on undefined behavior. This broke locking in various
> places in Java, for example, causing the the debugging support to be
> totally broken. It is worth someone who knows the Java codebase taking
> a look to see what other things could have been broken by this on
> FreeBSD 5.x+.
>
> The assumption is that pthread_mutex_trylock(3) on a default-type
> mutex will fail with EBUSY. This assumption is wrong for our
> libpthread, which returns EDEADLK if the owner thread is trying to
> acquire the mutex again with trylock. The behavior of performing a
> locking operation on a self-locked default-type mutex is explicitly
> undefined for pthread_mutex_lock(3).
>
> The POSIX specification is still not very clear. It defines
> pthread_mutex_trylock(3) in terms of pthread_mutex_lock(3) yet
> does not say what the defined behavior should be for a self-locked
> pthread_mutex_trylock(3) for any of the various mutex types, so it is
> ambiguous whether the result is clearly undefined or clearly to return
> EBUSY.
>
> It is a one line change whether or not to make libpthread return
> EDEADLK in this case, where it seems that most implementations do not.
>
> Reference: http://www.opengroup.org/onlinepubs/009695399/functions/pthread_mutex_lock.html
>
> Revision Changes Path
> 1.81 +1 -1 ports/java/jdk14/Makefile
> 1.1 +13 -0 ports/java/jdk14/files/patch-vm::os_bsd.hpp (new)
It would be reeeeeeally nice if we could decide whether to change
this behavior before 5.3-RELEASE, since it's a single-liner and is
continually biting people.
My opinion is that POSIX "wants" you to return EBUSY if you're going
to do any error checking at all in pthread_mutex_trylock(3).
--
Brian Fundakowski Feldman \'[ FreeBSD ]''''''''''\
<> green at FreeBSD.org \ The Power to Serve! \
Opinions expressed are my own. \,,,,,,,,,,,,,,,,,,,,,,\
More information about the freebsd-standards
mailing list