aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorgreen <green@FreeBSD.org>2004-10-21 07:22:56 +0800
committergreen <green@FreeBSD.org>2004-10-21 07:22:56 +0800
commitbd0f2445b6c9c8bf062a8f6d2306698a06f774b5 (patch)
tree15c5920a468b5f9f03867086a39f6e1a285984a1 /java
parent2ef95114a8059a49a51ed0d7f8524b2e3fde4db5 (diff)
downloadfreebsd-ports-gnome-bd0f2445b6c9c8bf062a8f6d2306698a06f774b5.tar.gz
freebsd-ports-gnome-bd0f2445b6c9c8bf062a8f6d2306698a06f774b5.tar.zst
freebsd-ports-gnome-bd0f2445b6c9c8bf062a8f6d2306698a06f774b5.zip
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
Diffstat (limited to 'java')
-rw-r--r--java/jdk14/Makefile2
-rw-r--r--java/jdk14/files/patch-vm::os_bsd.hpp13
-rw-r--r--java/jdk15/Makefile2
-rw-r--r--java/jdk15/files/patch-vm::os_bsd.hpp13
-rw-r--r--java/jdk16/Makefile2
-rw-r--r--java/jdk16/files/patch-vm::os_bsd.hpp13
6 files changed, 42 insertions, 3 deletions
diff --git a/java/jdk14/Makefile b/java/jdk14/Makefile
index ec0d3e413123..337da810e227 100644
--- a/java/jdk14/Makefile
+++ b/java/jdk14/Makefile
@@ -7,7 +7,7 @@
PORTNAME= jdk
PORTVERSION= ${JDK_VERSION}p${JDK_PATCHSET_VERSION}
-PORTREVISION= 5
+PORTREVISION= 6
CATEGORIES= java devel
MASTER_SITES= # http://www.sun.com/software/java2/download.html
# http://www.eyesbeyond.com/freebsddom/java/jdk14.html
diff --git a/java/jdk14/files/patch-vm::os_bsd.hpp b/java/jdk14/files/patch-vm::os_bsd.hpp
new file mode 100644
index 000000000000..cab94f46e4d3
--- /dev/null
+++ b/java/jdk14/files/patch-vm::os_bsd.hpp
@@ -0,0 +1,13 @@
+$FreeBSD$
+
+--- ../../hotspot/src/os/bsd/vm/os_bsd.hpp.orig Wed Oct 20 16:01:08 2004
++++ ../../hotspot/src/os/bsd/vm/os_bsd.hpp Wed Oct 20 16:01:30 2004
+@@ -353,7 +353,7 @@
+ bool trylock() {
+ verify();
+ int status = pthread_mutex_trylock(_mutex);
+- if (status == EBUSY)
++ if (status == EBUSY || status == EDEADLK)
+ return false;
+ assert(status == 0, "pthread_mutex_trylock");
+ #ifndef PRODUCT
diff --git a/java/jdk15/Makefile b/java/jdk15/Makefile
index ec0d3e413123..337da810e227 100644
--- a/java/jdk15/Makefile
+++ b/java/jdk15/Makefile
@@ -7,7 +7,7 @@
PORTNAME= jdk
PORTVERSION= ${JDK_VERSION}p${JDK_PATCHSET_VERSION}
-PORTREVISION= 5
+PORTREVISION= 6
CATEGORIES= java devel
MASTER_SITES= # http://www.sun.com/software/java2/download.html
# http://www.eyesbeyond.com/freebsddom/java/jdk14.html
diff --git a/java/jdk15/files/patch-vm::os_bsd.hpp b/java/jdk15/files/patch-vm::os_bsd.hpp
new file mode 100644
index 000000000000..cab94f46e4d3
--- /dev/null
+++ b/java/jdk15/files/patch-vm::os_bsd.hpp
@@ -0,0 +1,13 @@
+$FreeBSD$
+
+--- ../../hotspot/src/os/bsd/vm/os_bsd.hpp.orig Wed Oct 20 16:01:08 2004
++++ ../../hotspot/src/os/bsd/vm/os_bsd.hpp Wed Oct 20 16:01:30 2004
+@@ -353,7 +353,7 @@
+ bool trylock() {
+ verify();
+ int status = pthread_mutex_trylock(_mutex);
+- if (status == EBUSY)
++ if (status == EBUSY || status == EDEADLK)
+ return false;
+ assert(status == 0, "pthread_mutex_trylock");
+ #ifndef PRODUCT
diff --git a/java/jdk16/Makefile b/java/jdk16/Makefile
index ec0d3e413123..337da810e227 100644
--- a/java/jdk16/Makefile
+++ b/java/jdk16/Makefile
@@ -7,7 +7,7 @@
PORTNAME= jdk
PORTVERSION= ${JDK_VERSION}p${JDK_PATCHSET_VERSION}
-PORTREVISION= 5
+PORTREVISION= 6
CATEGORIES= java devel
MASTER_SITES= # http://www.sun.com/software/java2/download.html
# http://www.eyesbeyond.com/freebsddom/java/jdk14.html
diff --git a/java/jdk16/files/patch-vm::os_bsd.hpp b/java/jdk16/files/patch-vm::os_bsd.hpp
new file mode 100644
index 000000000000..cab94f46e4d3
--- /dev/null
+++ b/java/jdk16/files/patch-vm::os_bsd.hpp
@@ -0,0 +1,13 @@
+$FreeBSD$
+
+--- ../../hotspot/src/os/bsd/vm/os_bsd.hpp.orig Wed Oct 20 16:01:08 2004
++++ ../../hotspot/src/os/bsd/vm/os_bsd.hpp Wed Oct 20 16:01:30 2004
+@@ -353,7 +353,7 @@
+ bool trylock() {
+ verify();
+ int status = pthread_mutex_trylock(_mutex);
+- if (status == EBUSY)
++ if (status == EBUSY || status == EDEADLK)
+ return false;
+ assert(status == 0, "pthread_mutex_trylock");
+ #ifndef PRODUCT