diff -r 24525070d934 -r 4eff16f47ae2 src/hotspot/share/prims/unsafe.cpp --- a/src/hotspot/share/prims/unsafe.cpp Wed Dec 12 14:18:16 2018 +0100 +++ b/src/hotspot/share/prims/unsafe.cpp Wed Dec 12 18:35:26 2018 +0100 @@ -926,11 +926,12 @@ } } UNSAFE_END -static void post_thread_park_event(EventThreadPark* event, const oop obj, jlong timeout) { +static void post_thread_park_event(EventThreadPark* event, const oop obj, jlong timeout_nanos, jlong until_epoch_millis) { assert(event != NULL, "invariant"); assert(event->should_commit(), "invariant"); event->set_parkedClass((obj != NULL) ? obj->klass() : NULL); - event->set_timeout(timeout); + event->set_timeout(timeout_nanos); + event->set_until(until_epoch_millis); event->set_address((obj != NULL) ? (u8)cast_from_oop(obj) : 0); event->commit(); } @@ -942,7 +943,16 @@ JavaThreadParkedState jtps(thread, time != 0); thread->parker()->park(isAbsolute != 0, time); if (event.should_commit()) { - post_thread_park_event(&event, thread->current_park_blocker(), time); + const oop obj = thread->current_park_blocker(); + if (time == 0) { + post_thread_park_event(&event, obj, min_jlong, min_jlong); + } else { + if (isAbsolute != 0) { + post_thread_park_event(&event, obj, min_jlong, time); + } else { + post_thread_park_event(&event, obj, time, min_jlong); + } + } } HOTSPOT_THREAD_PARK_END((uintptr_t) thread->parker()); } UNSAFE_END