RFR(s): 8223777: In posix_spawn mode, failing to exec() jspawnhelper does not result in an error
David Lloyd
david.lloyd at redhat.com
Tue May 14 13:01:10 UTC 2019
Ah I see. I like the idea, it would mean pretty comprehensive error
reporting and should work across platforms too I think.
On Tue, May 14, 2019 at 7:16 AM Florian Weimer <fweimer at redhat.com> wrote:
>
> * David Lloyd:
>
> > Pipe communication isn't very costly AFAIK. The added complexity
> > would be waiting for either a thing to appear on the pipe indicating
> > success or else a waitpid/waitid+WNOHANG for exit code 127. But
> > writing a thing to the pipe won't help determine if the subsequent
> > exec succeeded, which is really the interesting bit.
>
> Please have a look at the code. It's already using CLOEXEC to cover
> the execve call (src/java.base/unix/native/libjava/ProcessImpl_md.c):
>
> switch (readFully(fail[0], &errnum, sizeof(errnum))) {
> case 0: break; /* Exec succeeded */
> case sizeof(errnum):
> waitpid(resultPid, NULL, 0);
> throwIOException(env, errnum, "Exec failed");
> goto Catch;
> default:
> throwIOException(env, errno, "Read failed");
> goto Catch;
> }
>
> Instead of 0/4 bytes, the outcome could be 0/4/8 bytes, corresponding to
> jspawnhelper exec failure, complete success, and exec failure in
> jspawnhelper.
>
> The run-time cost would be the additional pipe write in jspawnhelper.
> There shouldn't even be another ping-pong between the processes.
>
> Thanks,
> Florian
--
- DML
More information about the core-libs-dev
mailing list