On Sat, May 11, 2019 at 9:49 AM Remi Forax <fo...@univ-mlv.fr> wrote:
>
> I've seen a weird error on my CI [1] since the 15th of February when using 
> the jdk 13,
> i was not able to run jshell* using the programmatic API (java tool) anymore.
>
> Yesterday, i took the time to track that issue and i believe i've found the 
> root cause, trying to execute the java launcher using ProcessBuilder.start() 
> with the jdk 13 sometimes fails with an i/o exception (errno 13) which is 
> weird because you are trying to execute the same process that the one you are 
> executing. Note that this is a spurious bug, I was not able to find the exact 
> condition that triggers that bug.
> So sometime it works, sometime it doesn't.

Assuming you're running on Linux (given that the changeset only
applies to Linux), errno 13 is EACCES which would indicate a
filesystem permission issue.  Are you sure you have permission to
execute `jspawnhelper` in your JVM installation?  Could there be an
SELinux restriction in place?

Here's what the man page says:

```

     [EACCES]           Search permission is denied for a component of
the path prefix.


     [EACCES]           The new process file is not an ordinary file.


     [EACCES]           The new process file mode denies execute permission.


     [EACCES]           The new process file is on a filesystem
mounted with execution

                        disabled (MNT_NOEXEC in <sys/mount.h>).
```

> If i pass -Djdk.lang.Process.launchMechanism=fork (or vfork) when starting 
> the VM, the bug disappear meaning that the bug occurs when the VM is trying 
> to use posix_spawn, perhaps spawn is trying to do an optimization when you 
> try to execute the same process as the one you are running under some 
> conditions ?

The posix_spawn approach executes an intermediate support process
(`jspawnhelper`) which in turn executes the target process.  I believe
there's an extensive discussion on the reasons for this in the
`core-libs-dev` archive.


-- 
- DML

Reply via email to