Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 25 Oct 2003 18:01:03 +0200
From:      "Remco van 't Veer" <rwvtveer@xs4all.nl>
To:        Alexey Zelkin <phantom@FreeBSD.org.ua>
Cc:        java@freebsd.org
Subject:   Re: jdk14 fork() problem fix
Message-ID:  <20031025160103.GC7723@azrael.xs4all.nl>
In-Reply-To: <20031023104836.GB7723@azrael.xs4all.nl>
References:  <20031023122839.A75570@phantom.cris.net> <20031023104836.GB7723@azrael.xs4all.nl>

next in thread | previous in thread | raw e-mail | index | archive | help
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 <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];
> > _______________________________________________
> > 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"

-- 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20031025160103.GC7723>