(XS) RFR: 8146222: assert(_initialized) failed: TLS not initialized yet!

Daniel D. Daugherty daniel.daugherty at oracle.com
Fri Jan 8 14:47:31 UTC 2016


On 1/7/16 9:01 PM, David Holmes wrote:
> Bug: https://bugs.openjdk.java.net/browse/JDK-8146222
>
> webrev: http://cr.openjdk.java.net/~dholmes/8146222/webrev/

src/share/vm/runtime/thread.cpp
     No comments.

Thumbs up.

Dan


>
> JDK-8144947 showed an error path, on Windows, where we can call 
> Thread::current_or_null before TLS has been initialized and so hit the 
> assertion failure - see bug report for details.
>
> Simple fix is to move the ThreadLocalStorage::init() prior to any 
> argument parsing code. As it contains simple OS library calls it can 
> be initialized very early. Even the asserts in it still work (somewhat 
> surprisingly) after the move.
>
> Failure mode of 
> com/sun/management/HotSpotDiagnosticMXBean/CheckOrigin.java before the 
> fix:
>
> Agent[1].stdout: ## nof_mallocs = 674, nof_frees = 38
> Agent[1].stdout: ## memory stomp:
> Agent[1].stdout: GuardedMemory(0x0000000000fbf690) 
> base_addr=0x0000000000fbf3f0 tag=0x00000000000da360 user_size=16512112 
> user_data=0x0000000000fbf410
> Agent[1].stdout: Header guard @0x0000000000fbf3f0 is BROKEN
> Agent[1].stdout: # To suppress the following error report, specify 
> this argument
> Agent[1].stdout: # after -XX: or in .hotspotrc: 
> SuppressErrorAt=\threadLocalStorage_windows.cpp:52
> Agent[1].stdout: #
> Agent[1].stdout: # A fatal error has been detected by the Java Runtime 
> Environment:
> Agent[1].stdout: #
> Agent[1].stdout: # Internal Error 
> (C:\jprt\T\P1\020042.daholme\s\hotspot\src\os\windows\vm\threadLocalStorage_windows.cpp:52), 
> pid=5076, tid=4348
> Agent[1].stdout: # assert(_initialized) failed: TLS not initialized yet!
>
> Failure mode after:
>
> Agent[1].stdout: ## nof_mallocs = 601, nof_frees = 36
> Agent[1].stdout: ## memory stomp:
> Agent[1].stdout: GuardedMemory(0x00f1fc44) base_addr=0x00f1fb40 
> tag=0x003a9bc0 user_size=1942466404 user_data=0x00f1fb58
> Agent[1].stdout: Header guard @0x00f1fb40 is BROKEN
> Agent[1].stdout: #
> Agent[1].stdout: # A fatal error has been detected by the Java Runtime 
> Environment:
> Agent[1].stdout: #
> Agent[1].stdout: # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at 
> pc=0x73bb8ab6, pid=10328, tid=7672
>
> Testing:
>   - JPRT
>   - com/sun/management/HotSpotDiagnosticMXBean/CheckOrigin.java
>   - testing that the asserts in the relocated init() method fire 
> correctly
>
> Thanks,
> David



More information about the hotspot-runtime-dev mailing list