[8u60] RFR: 8078470: [Linux] Replace syscall use in os::fork_and_exec with glibc fork() and execve() (original) (raw)
Thomas Stüfe thomas.stuefe at gmail.com
Thu Apr 23 08:00:05 UTC 2015
- Previous message: [8u60] RFR: 8078470: [Linux] Replace syscall use in os::fork_and_exec with glibc fork() and execve()
- Next message: [8u60] RFR: 8078470: [Linux] Replace syscall use in os::fork_and_exec with glibc fork() and execve()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi David,
On Thu, Apr 23, 2015 at 9:50 AM, David Holmes <david.holmes at oracle.com> wrote:
Hi Thomas,
On 23/04/2015 5:24 PM, Thomas Stüfe wrote:
Hi David
- would it be possible to use vfork() instead of fork()? Might increase the chance of fork() succeeding in out-of-memory scenarios. The way fork/execve is used here is simple enough for vfork(). I'm reluctant to use vfork() as it is an unknown. The use of fork() has been trialled by Google with no problem. I understand.
We use vfork() by default on Linux and HP-UX since 3-4 years for Runtime.exec() without problems (but our implementation differs wildly from the standard one). But then, Runtime.exec does not get called in error situations, so the conditions may be different for os::fork_and_exec().
- would it be possible to print out errno in case fork fails?
Sure. Thanks!
..Thomas
Thanks, David
Regards, Thomas
On Thu, Apr 23, 2015 at 8:40 AM, David Holmes <david.holmes at oracle.com_ _<mailto:david.holmes at oracle.com>> wrote: webrev: http://cr.openjdk.java.net/~dholmes/8078470/webrev/ bug: https://bugs.openjdk.java.net/browse/JDK-8078470 For historical reasons, dating back to LinuxThreads, os::forkandexec uses direct syscalls to perform fork and execve functions. The fork syscall has been deprecated on linux for quite some time and some distributions are now shipping with deprecated syscalls removed - this results in a ENOSYS error and the "OnError" commands that utilize os::forkandexec no longer work. The problem was discussed here: http://mail.openjdk.java.net/pipermail/hotspot-dev/2015-April/017916.html It seems the concerns surrounding direct use of glibc fork() and exec() are no longer legitimate and Martin Buchholz reports that Google replaced the syscalls with glibc calls some time ago and have not had any problems. So we propose to apply the same change uniformly on Linux. This is initially going into 8u60 via jdk8u-hs-dev due to time constraints on the 8u60 schedule, and an internal limitation preventing me from pushing this to 9 right now. But it will be "backported" to 9 ASAP. Thanks, David
- Previous message: [8u60] RFR: 8078470: [Linux] Replace syscall use in os::fork_and_exec with glibc fork() and execve()
- Next message: [8u60] RFR: 8078470: [Linux] Replace syscall use in os::fork_and_exec with glibc fork() and execve()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]