RFR 8191278: MappedByteBuffer bulk access memory failures are not handled gracefully

Harold Seigel harold.seigel at oracle.com
Wed Jun 5 18:55:19 UTC 2019


Hi Jamsheed,

Test hotspot/jtreg/runtime/Unsafe/InternalErrorTest.java fails on 
Windows with:

    java.nio.file.FileSystemException: The requested operation cannot be performed on a file with a user-mapped section open.

    	at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:92)
    	at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
    	at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
    	at java.base/sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:235)
    	at java.base/java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:478)
    	at java.base/java.nio.file.Files.newOutputStream(Files.java:223)
    	at java.base/java.nio.file.Files.write(Files.java:3488)
    	at InternalErrorTest.main(InternalErrorTest.java:91)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    	at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:127)
    	at java.base/java.lang.Thread.run(Thread.java:830)

Can you add this to the test?

      * @requires os.family != "windows"

Thanks, Harold

On 6/3/2019 2:43 PM, Jamsheed wrote:
> Hi Dan,
>
> Thanks for the review.
>
> Best regards,
>
> Jamsheed
>
> On 01/06/19 6:29 PM, Daniel D. Daugherty wrote:
>> That's even better. Thanks.
>>
>> Dan
>>
>>
>> On 6/1/19 5:11 AM, Jamsheed wrote:
>>>
>>> Hi Dan,
>>>
>>> updated webrev in place
>>>
>>> added only assert
>>>
>>> +  BasicType doing_unsafe_access_bt = T_BYTE;
>>> +  assert((sizeof(bool) * CHAR_BIT) == 8, "not implemented");
>>>
>>> Best regards,
>>>
>>> Jamsheed
>>>
>>> On 01/06/19 12:56 PM, Jamsheed wrote:
>>>>
>>>> Hi Dan,
>>>>
>>>> i understand it is incorrect to assume bool(cpp compiler) 
>>>> implementation above byte level.
>>>>
>>>> in that case i will just put an assert.
>>>>
>>>> +  BasicType doing_unsafe_access_bt = T_BYTE;
>>>>
>>>> + assert(sizeof(bool) == 1, "not implemented");
>>>>
>>>> Best regards,
>>>>
>>>> Jamsheed
>>>>
>>>> On 31/05/19 10:34 PM, Jamsheed wrote:
>>>>>> src/hotspot/share/opto/library_call.cpp
>>>>>>     In src/hotspot/share/runtime/thread.hpp:
>>>>>>     L1090:   volatile bool         _doing_unsafe_access;
>>>>>>
>>>>>>     L4220:   store_to_memory(control(), doing_unsafe_access_addr, 
>>>>>> intcon(1), T_BYTE, Compile::AliasIdxRaw, MemNode::unordered);
>>>>>>     L4230:   store_to_memory(control(), doing_unsafe_access_addr, 
>>>>>> intcon(0), T_BYTE, Compile::AliasIdxRaw, MemNode::unordered);
>>>>>>         Is T_BYTE a safe assumption (size wise) for writing to a 
>>>>>> C++ bool?
>>>>>
>>>>> Thanks for pointing this.
>>>>>
>>>>> hope [1] will work ?
>>>> [1]
>>>> +  BasicType doing_unsafe_access_bt = T_BYTE;
>>>> +  switch(sizeof(bool)) {
>>>> +    case 1: doing_unsafe_access_bt = T_BYTE;  break;
>>>> +    case 2: doing_unsafe_access_bt = T_SHORT; break;
>>>> +    case 4: doing_unsafe_access_bt = T_INT;   break;
>>>> +    case 8: doing_unsafe_access_bt = T_LONG;  break;
>>>> +    default: ShouldNotReachHere();
>>>> +  }
>>>>
>>>>    // update volatile field
>>>> -  store_to_memory(control(), doing_unsafe_access_addr, intcon(1), 
>>>> T_BYTE, Compile::AliasIdxRaw, MemNode::unordered);
>>>> +  store_to_memory(control(), doing_unsafe_access_addr, intcon(1), 
>>>> doing_unsafe_access_bt, Compile::AliasIdxRaw, MemNode::unordered);
>>>>
>>>>    // Call it.  Note that the length argument is not scaled.
>>>>    make_runtime_call(RC_LEAF|RC_NO_FP,
>>>>                      OptoRuntime::fast_arraycopy_Type(),
>>>>                      StubRoutines::unsafe_arraycopy(),
>>>>                      "unsafe_arraycopy",
>>>>                      TypeRawPtr::BOTTOM,
>>>>                      src, dst, size XTOP);
>>>>
>>>> -  store_to_memory(control(), doing_unsafe_access_addr, intcon(0), 
>>>> T_BYTE, Compile::AliasIdxRaw, MemNode::unordered);
>>>> +  store_to_memory(control(), doing_unsafe_access_addr, intcon(0), 
>>>> doing_unsafe_access_bt, Compile::AliasIdxRaw, MemNode::unordered); 
>>


More information about the hotspot-dev mailing list