RFR 4823133: RandomAccessFile.length() is not thread-safe

vyom vyom.tewari at oracle.com
Thu Dec 17 08:14:35 UTC 2015


Hi Martin,

thanks for review, i undated the 
webrev(http://cr.openjdk.java.net/~vtewari/4823133/webrev0.2/ 
<http://cr.openjdk.java.net/%7Evtewari/4823133/webrev0.2/>) as per your 
comment after confirming that the corresponding "fd" if opened with 
"open64".

Thanks,
Vyom


On Thursday 17 December 2015 12:38 AM, Martin Buchholz wrote:
> Calling naked fstat without _FILE_OFFSET_BITS=64 is a bug.  Don't you
> need to call fstat64 if it's available?
>
> +jlong
> +handleGetLength(FD fd)
> +{
> +    struct stat sb;
> +    if (fstat(fd, &sb) == 0) {
> +        return sb.st_size;
> +    } else {
> +        return -1;
> +    }
> +}
>
> On Wed, Dec 16, 2015 at 5:02 AM, vyom <vyom.tewari at oracle.com> wrote:
>> Hi,
>>
>> Updated the webrev(http://cr.openjdk.java.net/~vtewari/4823133/webrev0.1/
>> <http://cr.openjdk.java.net/%7Evtewari/4823133/webrev0.1/>) as per Martin
>> review comment removed the _FILE_OFFSET_BITS from source.
>>
>> Thanks,
>> Vyom
>>
>>
>>
>> On Tuesday 15 December 2015 10:55 PM, Martin Buchholz wrote:
>>> _FILE_OFFSET_BITS 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 -D_FILE_OFFSET_BITS=64, but
>>> that would be a big job.  So traditionally the JDK has instead used
>>> the functions made available via _LARGEFILE64_SOURCE.  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 _FILE_OFFSET_BITS=64 strategy, but it's probably a job
>>> for build-dev, not core-libs-dev.
>>>
>>>
>>>
>>>
>>> On Tue, Dec 15, 2015 at 8:31 AM, Roger Riggs <Roger.Riggs at oracle.com>
>>> wrote:
>>>> Hi Yvom,
>>>>
>>>> Minor comments:
>>>>
>>>> src/java.base/share/native/libjava/RandomAccessFile.c:
>>>>    - "length fail" might be clearer as "GetLength failed"
>>>>
>>>> src/java.base/unix/native/libjava/io_util_md.c:
>>>>
>>>>    - Please add a comment before the define of FILE_OFFSET_BITS to
>>>> indicate
>>>> where it is used and why it is there.
>>>>    - BTW, are there any unintended side effects?
>>>>      Perhaps a different issue but perhaps 64 bit offsets should be used
>>>> everywhere
>>>>
>>>> src/java.base/windows/native/libjava/io_util_md.c
>>>>    - Line 592: Using INVALID_HANDLE_VALUE is better than -1 and is used
>>>> elsewhere in the file
>>>>      BTW, Testing for invalid handle might be unnecessary since the call
>>>> to
>>>> GetFileSizeEx will fail
>>>>      if it is invalid, yielding the same result.
>>>>
>>>> Roger
>>>>
>>>>
>>>> On 12/10/2015 5:52 AM, vyom wrote:
>>>>> Hi All,
>>>>>
>>>>> Please review my changes for below bug.
>>>>>
>>>>> Bug: JDK-4823133 : RandomAccessFile.length() is not thread-safe
>>>>>
>>>>> Webrev:http://cr.openjdk.java.net/~vtewari/4823133/webrev0.0/
>>>>> <http://cr.openjdk.java.net/%7Evtewari/4823133/webrev0.0/>
>>>>>
>>>>> This change ensure that  length() does not temporarily changes the file
>>>>> pointer and it will make sure that there is no race
>>>>> condition in case of multi thread uses.
>>>>>
>>>>> Thanks,
>>>>> Vyom
>>>>>
>>>>>
>>>>>
>>>>>




More information about the core-libs-dev mailing list