Wed, 12 Dec 2018 18:35:26 +0100
8165675: Trace event for thread park has incorrect unit for timeout
Reviewed-by: mgronlun
src/share/vm/jfr/metadata/metadata.xml | file | annotate | diff | comparison | revisions | |
src/share/vm/prims/unsafe.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/share/vm/jfr/metadata/metadata.xml Tue Feb 13 15:48:23 2018 +0100 1.2 +++ b/src/share/vm/jfr/metadata/metadata.xml Wed Dec 12 18:35:26 2018 +0100 1.3 @@ -40,7 +40,8 @@ 1.4 1.5 <Event name="ThreadPark" category="Java Application" label="Java Thread Park" thread="true" stackTrace="true"> 1.6 <Field type="Class" name="parkedClass" label="Class Parked On" /> 1.7 - <Field type="long" contentType="millis" name="timeout" label="Park Timeout" /> 1.8 + <Field type="long" contentType="nanos" name="timeout" label="Park Timeout" /> 1.9 + <Field type="long" contentType="epochmillis" name="until" label="Park Until" /> 1.10 <Field type="ulong" contentType="address" name="address" label="Address of Object Parked" relation="JavaMonitorAddress" /> 1.11 </Event> 1.12 1.13 @@ -1134,5 +1135,6 @@ 1.14 <XmlContentType name="address" annotationType="jdk.jfr.MemoryAddress" /> 1.15 <XmlContentType name="percentage" annotationType="jdk.jfr.Percentage" /> 1.16 <XmlContentType name="millis" annotationType="jdk.jfr.Timespan" annotationValue="MILLISECONDS" /> 1.17 - 1.18 + <XmlContentType name="nanos" annotationType="jdk.jfr.Timespan" annotationValue="NANOSECONDS" /> 1.19 + 1.20 </Metadata>
2.1 --- a/src/share/vm/prims/unsafe.cpp Tue Feb 13 15:48:23 2018 +0100 2.2 +++ b/src/share/vm/prims/unsafe.cpp Wed Dec 12 18:35:26 2018 +0100 2.3 @@ -1236,11 +1236,12 @@ 2.4 #endif 2.5 UNSAFE_END 2.6 2.7 -static void post_thread_park_event(EventThreadPark* event, const oop obj, jlong timeout) { 2.8 +static void post_thread_park_event(EventThreadPark* event, const oop obj, jlong timeout_nanos, jlong until_epoch_millis) { 2.9 assert(event != NULL, "invariant"); 2.10 assert(event->should_commit(), "invariant"); 2.11 event->set_parkedClass((obj != NULL) ? obj->klass() : NULL); 2.12 - event->set_timeout(timeout); 2.13 + event->set_timeout(timeout_nanos); 2.14 + event->set_until(until_epoch_millis); 2.15 event->set_address((obj != NULL) ? (u8)cast_from_oop<uintptr_t>(obj) : 0); 2.16 event->commit(); 2.17 } 2.18 @@ -1263,7 +1264,16 @@ 2.19 (uintptr_t) thread->parker()); 2.20 #endif /* USDT2 */ 2.21 if (event.should_commit()) { 2.22 - post_thread_park_event(&event, thread->current_park_blocker(), time); 2.23 + const oop obj = thread->current_park_blocker(); 2.24 + if (time == 0) { 2.25 + post_thread_park_event(&event, obj, min_jlong, min_jlong); 2.26 + } else { 2.27 + if (isAbsolute != 0) { 2.28 + post_thread_park_event(&event, obj, min_jlong, time); 2.29 + } else { 2.30 + post_thread_park_event(&event, obj, time, min_jlong); 2.31 + } 2.32 + } 2.33 } 2.34 UNSAFE_END 2.35