RFR 4823133: RandomAccessFile.length() is not thread-safe (original) (raw)
Martin Buchholz martinrb at google.com
Fri Dec 18 19:59:09 UTC 2015
- Previous message (by thread): RFR 4823133: RandomAccessFile.length() is not thread-safe
- Next message (by thread): RFR: JDK-8115868: 32-bit JVM failed to start from a large network filesystem
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Fri, Dec 18, 2015 at 5:35 AM, Magnus Ihse Bursie <magnus.ihse.bursie at oracle.com> wrote:
On 2015-12-15 18:25, Martin Buchholz wrote:
FILEOFFSETBITS is generally an all-or-nothing thing, because it affects interoperability between translation units. It would be good to convert all of the JDK build to use -DFILEOFFSETBITS=64, but that would be a big job. So traditionally the JDK has instead used the functions made available via LARGEFILE64SOURCE. But that is also a JDK-wide job now, because every call to plain stat in the source code is broken on 32-bit systems with 64-bit inodes, which are becoming more common. I recommend the FILEOFFSETBITS=64 strategy, but it's probably a job for build-dev, not core-libs-dev. If I understand things correctly, then setting FILEOFFSETBITS=64 would mean two things: 1) Just pass this additional define to all C files being compiled (a build change) 2) Update all calls to file operating functions to make sure the proper 64-bit types are used (changes in source code). The change for 1) is a trivial one liner, while getting 2) correct is a serious undertaking in the source code.
If everyone is properly pairing up their function calls with proper types (i.e. using off_t consistently), then everything should Just Work.
Such a change must be done by the
component teams, not the build team.
I think this is an openjdk cultural problem - changes like this can and should be done by one person, with help from component teams where necessary. It's safer to add _FILE_OFFSET_BITS=64 everywhere at once (although hotspot and libraries can probably be cleanly separated) to avoid type size disagreement between translation units.
For bonus points, we can later change all of those *64 functions back to their standard equivalents.
With that said, I think it is a
reasonable change and I'll support it as much as I can. But as the division of labour is done here, it's not the work of the build team to go and make heavy modifications to the product source code.
- Previous message (by thread): RFR 4823133: RandomAccessFile.length() is not thread-safe
- Next message (by thread): RFR: JDK-8115868: 32-bit JVM failed to start from a large network filesystem
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]