RFR (11): 8205878: pthread_getcpuclockid is expected to return 0 code

David Holmes david.holmes at oracle.com
Thu Jul 5 09:58:39 UTC 2018


<sigh> Solaris compiler complains about doing a return from inside a 
do-while loop. I'll have to rework part of the fix tomorrow.

David

On 5/07/2018 6:19 PM, David Holmes wrote:
> Bug: https://bugs.openjdk.java.net/browse/JDK-8205878
> Webrev: http://cr.openjdk.java.net/~dholmes/8205878/webrev/
> 
> Problem:
> 
> The tests create native threads that attach to the VM through 
> JNI_AttachCurrentThread but which then terminate without detaching 
> themselves. When the VM exits and we're using Flight Recorder 
> "dumponexit" this leads to a call to VM_PrintThreads that in part wants 
> to print the per-thread CPU usage. When we encounter the threads that 
> have terminated already the low level pthread_getcpuclockid calls 
> returns ESRCH but the code doesn't expect that and so fails an assert in 
> debug mode and can SEGV in product mode.
> 
> Solution:
> 
> Serviceability-side: fix the tests
> 
> Change the tests so that the threads detach before terminating. The two 
> tests are (surprisingly) written in completely different styles, so the 
> solution also takes on two different styles.
> 
> Runtime-side: make the VM more robust in the fact of JNI attached 
> threads that terminate before detaching, and add a regression test
> 
> I took a good look at the low-level code for interacting with arbitrary 
> threads and as far as I can see the problem only exists for this one 
> case of pthread_getcpuclockid on Linux. Elsewhere the potential for a 
> library call failure just reports an error value (such as -1 for the cpu 
> time used).
> 
> So the fix is simply to allow for ESRCH when calling 
> pthread_getcpuclockid and return -1 for the cpu usage in that case.
> 
> I created a new regression test to create a new native thread, attach it 
> and then let it terminate while still attached. The java code then calls 
> various Thread and ThreadMXBean functions on it to ensure there are no 
> crashes or unexpected exceptions.
> 
> Testing:
>   - old tests with fixed run-time
>   - old run-time with fixed tests
>   - mach tier4 (which exposed the problem - that's where we enable 
> Flight recorder for the tests) [in progress]
>   - mach5 tier 1-3 for good measure [in progress]
>   - new regression test
> 
> Thanks,
> David


More information about the hotspot-runtime-dev mailing list