Review Request: JDK-8001334 - Remove use of JVM_* functions from java.io code
Alan Bateman
Alan.Bateman at oracle.com
Fri Feb 1 21:25:38 UTC 2013
On 01/02/2013 18:12, Martin Buchholz wrote:
> :
>
> My comments are all very high level.
>
> The history of generic C-level infrastructure in the JDK is
> unsuccessful. The JVM_ functions were apparently a failure, but who
> is willing to own the problem of a suitable replacement? Leaving the
> problem up to individual component teams is a recipe for each
> component having different interesting bugs using the same functionality.
>
> The obvious examples are: all internal file operations in the JDK
> should be using LARGEFILE variants on 32-bit platforms. And all file
> descriptor creations should be using O_CLOEXEC by default (much less
> important). Does anyone own this problem?
>
The JVM/HPI was useful and important (particularly to I/O and networking
areas) when we had different threading models. We've required native
threading support for a long time now so the need to go through the VM
has mostly gone away. Also in recent years we are making using of highly
platform specific I/O facilities that aren't intended for porting to
other platforms.
We don't have a replacement and it's a good discussion point. A porting
interface for the libraries would help in some areas, although not all
because of the broad set of services and interfaces that are used.
Without such an interface then it does mean a little bit of duplication
and potential for inconsistencies. Common operations like we are
discussing here could be easily supported as utility functions in
libjava or elsewhere, we just haven't had any discussion here about this
topic.
Anyway, on the specifics then we should be using open64 or open with the
LARGEFILE flag everywhere. You pointed out issue a few days ago with the
launcher parsing the JAR manifest. You should push the patch for that.
Also shout/propose patches if you find others.
I think the close-on-exec issue does need a bit of thought. We have
several places that open files or sockets and they aren't using it so we
are dependent on the exec code to close the file descriptors in the
child. I haven't come across any bug reports so it's possible that there
aren't too many people doing fork/equivalent in native code. I do agree
we should look at it, although it less important as you point you.
-Alan
More information about the core-libs-dev
mailing list