aboutsummaryrefslogtreecommitdiffstats
path: root/java/jdk14
diff options
context:
space:
mode:
authorphantom <phantom@FreeBSD.org>2003-10-29 16:20:59 +0800
committerphantom <phantom@FreeBSD.org>2003-10-29 16:20:59 +0800
commitad006dda8e50d79f660d65d7bf742a5fc6c30bc4 (patch)
tree2859b877b8e47d65ba7bdd324c6adfba8f4122d7 /java/jdk14
parentca8cd9b775eccf203c19398adeedc32a9ed43941 (diff)
downloadfreebsd-ports-graphics-ad006dda8e50d79f660d65d7bf742a5fc6c30bc4.tar.gz
freebsd-ports-graphics-ad006dda8e50d79f660d65d7bf742a5fc6c30bc4.tar.zst
freebsd-ports-graphics-ad006dda8e50d79f660d65d7bf742a5fc6c30bc4.zip
. Add fix for "runaway process" problem. It should fix of stalled
processes problem for people who use Runtime.getRuntime.exec() method and related things. Least five people reported that this patch fixed problem for them. IMPORTANT: I'd also suggested to all jdk14 users who runs FreeBSD 4.x and use libc_r at FreeBSD 5.x to upgrade. . Stop removing "src.zip" from installation bundle. Since -p4 it builds correctly and there's no reason to forbit people to use it. . Bump PORTREVISION.
Diffstat (limited to 'java/jdk14')
-rw-r--r--java/jdk14/Makefile3
-rw-r--r--java/jdk14/files/patch-UNIXProcess_md.c.bsd93
-rw-r--r--java/jdk14/pkg-plist1
3 files changed, 95 insertions, 2 deletions
diff --git a/java/jdk14/Makefile b/java/jdk14/Makefile
index c40994be3ed..c1ec79e7fa2 100644
--- a/java/jdk14/Makefile
+++ b/java/jdk14/Makefile
@@ -7,6 +7,7 @@
PORTNAME= jdk
PORTVERSION= ${JDK_VERSION}p${JDK_PATCHSET_VERSION}
+PORTREVISION= 1
CATEGORIES= java devel
MASTER_SITES= # http://www.sun.com/software/java2/download.html
# http://www.eyesbeyond.com/freebsddom/java/jdk14.html
@@ -211,8 +212,6 @@ post-build:
@# XXX make sure that SwingSet2/resources does not exists
@${RM} -rf ${JDKIMAGEDIR}/demo/jfc/SwingSet2/resources
@${RM} -rf ${JDKIMAGEDIR}/demo/plugin/jfc/SwingSet2/resources
- @# This file serves no purpose (in case of port)
- @${RM} -f ${JDKIMAGEDIR}/src.zip
.if !defined(NODEBUG)
pre-install:
diff --git a/java/jdk14/files/patch-UNIXProcess_md.c.bsd b/java/jdk14/files/patch-UNIXProcess_md.c.bsd
new file mode 100644
index 00000000000..d9ec95eefa7
--- /dev/null
+++ b/java/jdk14/files/patch-UNIXProcess_md.c.bsd
@@ -0,0 +1,93 @@
+$FreeBSD$
+
+--- ../../j2se/src/solaris/native/java/lang/UNIXProcess_md.c.bsd.orig Wed Oct 29 12:22:58 2003
++++ ../../j2se/src/solaris/native/java/lang/UNIXProcess_md.c.bsd Wed Oct 29 12:23:33 2003
+@@ -22,6 +22,12 @@
+ #include <errno.h>
+ #include <unistd.h>
+
++#if defined(__FreeBSD__)
++#include <dlfcn.h>
++#include <pthread.h>
++#include <pthread_np.h>
++#endif
++
+ /* path in the environment */
+ static char **PATH = 0;
+ /* effective uid */
+@@ -228,6 +234,61 @@
+ }
+ }
+
++#if defined(__FreeBSD__)
++
++extern pid_t __sys_fork(void);
++
++static pid_t
++jdk_fork_wrapper()
++{
++ pid_t resultPid;
++#if (__FreeBSD_version < 5)
++ static int is_libc_r = -1;
++ void *funcref;
++
++ if (is_libc_r == -1) {
++ is_libc_r = 1;
++
++ /*
++ * BSDNOTE: Check for loaded symbols.
++ *
++ * If "_thr_critical_enter" is found assume we are using 'libthr'.
++ * If _kse_critical_enter is found assume we are using 'libkse'.
++ * Otherwise we are using libc_r.
++ *
++ * If libc_r is loaded, use fork system call drectly to avoid
++ * problems with using protected pages.
++ *
++ * --phantom
++ */
++ funcref = dlsym(RTLD_DEFAULT, "_kse_critical_enter");
++ if (funcref != NULL)
++ is_libc_r = 0;
++ else {
++ funcref = dlsym(RTLD_DEFAULT, "_thr_critical_enter");
++ if (funcref != NULL)
++ is_libc_r = 0;
++ }
++ }
++
++ if (is_libc_r == 0) {
++ /* Not a libc_r */
++ resultPid = fork();
++ } else {
++#endif /* __FreeBSD_version < 5 */
++ pthread_suspend_all_np();
++ resultPid = __sys_fork();
++ if (resultPid != 0)
++ /* leave child in single threading mode */
++ pthread_resume_all_np();
++#if (__FreeBSD_version < 5)
++ }
++#endif /* __FreeBSD_version < 5 */
++
++ return resultPid;
++}
++#endif /* __FreeBSD__ */
++
+ JNIEXPORT jint JNICALL
+ Java_java_lang_UNIXProcess_forkAndExec(JNIEnv *env,
+ jobject process,
+@@ -335,8 +396,12 @@
+ if (path != NULL) {
+ cwd = (char *)JNU_GetStringPlatformChars(env, path, NULL);
+ }
+-
++
++#if defined(__FreeBSD__)
++ resultPid = jdk_fork_wrapper();
++#else
+ resultPid = fork();
++#endif
+
+ if (resultPid < 0) {
+ char errmsg[128];
diff --git a/java/jdk14/pkg-plist b/java/jdk14/pkg-plist
index 87b8eb44c34..b10e800df61 100644
--- a/java/jdk14/pkg-plist
+++ b/java/jdk14/pkg-plist
@@ -2,6 +2,7 @@ jdk%%JDK_VERSION%%/COPYRIGHT
jdk%%JDK_VERSION%%/LICENSE
jdk%%JDK_VERSION%%/README
jdk%%JDK_VERSION%%/README.html
+jdk%%JDK_VERSION%%/src.zip
jdk%%JDK_VERSION%%/bin/ControlPanel
jdk%%JDK_VERSION%%/bin/HtmlConverter
jdk%%JDK_VERSION%%/bin/appletviewer