Review request for 5049299

David Holmes - Sun Microsystems David.Holmes at Sun.COM
Fri May 22 10:51:18 UTC 2009


Hi Michael,

I can't say that I grok all the detail in this but I get the gist and 
overall I don't see anything obviously problematic. I have a couple of 
small comments:

In the Makefile:

+ HELPER_EXE = $(BINDIR)/processhelper$(EXE_SUFFIX)

Isn't EXE_SUFFIX superfluous here? It has to be an empty string 
otherwise the Java code won't know the name of the helper.

In UnixProcess_md.c:

116 jlup_xmalloc(void *env, int size)

Why did you have to lose the type of env ?
Why is this function defined differnetly in two files?

Cheers,
David


Michael McMahon said the following on 05/22/09 20:05:
> Hi,
> 
> I have just posted a webrev for 5049299: (process) Use posix_spawn, not 
> fork, on S10 to avoid swap exhaustion.
> 
> webrev location: http://cr.openjdk.java.net/~michaelm/5049299/webrev.00/
> 
> **I'd like to give an outline of the change here, to make reviewing the 
> webrev a bit easier.
> Basically, while posix_spawn() is a fairly elaborate and complicated 
> system call, it can't quite do
> everything that the old fork()/exec() combination can do, so the only 
> feasible way to do this, is to
> use posix_spawn to launch a new helper executable "processhelper", which 
> in turn execs the
> target (after cleaning up file-descriptors etc.) The end result is the 
> same as before, a child process
> linked to the parent in the same way, but it avoids the problem of 
> duplicating the parent (VM) process
> address space temporarily, before launching the target command.
> 
> In the original implementation, the native code for 
> UNIXProcess.forkAndExec() was the same
> for both Linux and Solaris.  Now, we have split it, so that Linux 
> retains the original implementation
> but for Solaris, the native method is renamed spawn() where the 
> implementation is partly in this function,
> but also partly in the new processhelper binary, which is spawned by the 
> spawn() method.
> 
> A number of utility functions, which were originally in 
> UNIXProcess_md.c, are also needed by the
> processhelper binary, have been moved into new source files 
> (processutil_md.[ch]).
> Because the functions were originally static in UNIXProcess_md.c, a 
> prefix is added to their names (jlup_)
> (from initials of java.lang.UNIXProcess), to avoid any conflict in 
> global scope. This applies to the Linux
> version as well as the Solaris version. So, this looks like new code, 
> but the body of these functions
> are not changed from before.
> 
> I'm proposing not to add any unit/regression tests for this change, 
> since the point of it
> is kind of self-evident from the source code (ie. stop using fork() and 
> use posix_spawn() instead),
> and there shouldn't be any behaviour change other than memory usage.
> This area of the platform seems to be well covered by existing 
> regression/unit tests.
> 
> Hope this helps,
> Thanks,
> Michael.
> 



More information about the core-libs-dev mailing list