From owner-freebsd-java@FreeBSD.ORG Sat Oct 25 09:01:33 2003 Return-Path: Delivered-To: freebsd-java@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4512316A4B3 for ; Sat, 25 Oct 2003 09:01:33 -0700 (PDT) Received: from azrael.xs4all.nl (azrael.xs4all.nl [213.84.50.139]) by mx1.FreeBSD.org (Postfix) with ESMTP id C626243F3F for ; Sat, 25 Oct 2003 09:01:31 -0700 (PDT) (envelope-from remco@azrael.xs4all.nl) Received: from azrael.xs4all.nl (localhost.xs4all.nl [127.0.0.1]) by azrael.xs4all.nl (8.12.8p1/8.12.8) with ESMTP id h9PG14US090825; Sat, 25 Oct 2003 18:01:05 +0200 (CEST) (envelope-from remco@azrael.xs4all.nl) Received: (from remco@localhost) by azrael.xs4all.nl (8.12.8p1/8.12.8/Submit) id h9PG13TH090824; Sat, 25 Oct 2003 18:01:03 +0200 (CEST) Date: Sat, 25 Oct 2003 18:01:03 +0200 From: "Remco van 't Veer" To: Alexey Zelkin Message-ID: <20031025160103.GC7723@azrael.xs4all.nl> References: <20031023122839.A75570@phantom.cris.net> <20031023104836.GB7723@azrael.xs4all.nl> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20031023104836.GB7723@azrael.xs4all.nl> User-Agent: Mutt/1.5.4i cc: java@freebsd.org Subject: Re: jdk14 fork() problem fix X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Oct 2003 16:01:33 -0000 Hi, I've been running ant (with external processes like jikes and javadoc), compiling jsps and doing other stuff which fork processes with a jvm including your patch but I can't reproduce to problem. This ofcourse only proves my inability to repeat this bug and not that the problem has been fixed.. The hanging processes actually happend quiet often so I can say is much harder to reproduce. ;) I ran these tests on my FreeBSD 4.8 system. Does you remark about kse and thr mean this problem does not occure on systems using these technologies? Anyway, I am really happy with this patch and hope it will be included in the next version. Thank you for your fantastic work. Remco On Thu, Oct 23, 2003 at 12:48, Remco van 't Veer wrote: > Thanx! I have a new compile running right now. It will take > more than 10 hours to finish on my poor P3 so I hope to have some > test results for you tomorrow. > > Remco > > > On Thu, Oct 23, 2003 at 12:28, Alexey Zelkin wrote: > > > hi, > > > > This is an intermediate version of fix of jdk fork problem (i.e. > > Runtime.getRuntime().exec() and friends). > > > > It does affect only people who use libc_r (kse and thr should not > > be affected). > > > > Please try this one and report me if it fixes problems for you. > > > > PS: If you are rebuilding already built jdk (i.e. object files are > > already compiled) remove 'control/build/bsd-i586/tmp/java/java.lang' directory > > before restarting of build. > > > > Index: UNIXProcess_md.c.bsd > > =================================================================== > > RCS file: /home/jdk14-cvs/jdk142-src/j2se/src/solaris/native/java/lang/UNIXProcess_md.c.bsd,v > > retrieving revision 1.2 > > diff -u -r1.2 UNIXProcess_md.c.bsd > > --- UNIXProcess_md.c.bsd 15 Oct 2003 15:49:39 -0000 1.2 > > +++ UNIXProcess_md.c.bsd 23 Oct 2003 10:20:48 -0000 > > @@ -22,6 +22,12 @@ > > #include > > #include > > > > +#if defined(__FreeBSD__) > > +#include > > +#include > > +#include > > +#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]; > > _______________________________________________ > > freebsd-java@freebsd.org mailing list > > http://lists.freebsd.org/mailman/listinfo/freebsd-java > > To unsubscribe, send any mail to "freebsd-java-unsubscribe@freebsd.org" > > -- > _______________________________________________ > freebsd-java@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-java > To unsubscribe, send any mail to "freebsd-java-unsubscribe@freebsd.org" --