Mercurial > hg > truffle
diff src/share/vm/runtime/os.cpp @ 6766:a7509aff1b06
7194254: jstack reports wrong thread priorities
Reviewed-by: dholmes, sla, fparain
Contributed-by: Dmytro Sheyko <dmytro_sheyko@hotmail.com>
author | dholmes |
---|---|
date | Mon, 17 Sep 2012 07:36:31 -0400 |
parents | da91efe96a93 |
children | 85f1cded9793 |
line wrap: on
line diff
--- a/src/share/vm/runtime/os.cpp Fri Sep 14 22:00:41 2012 -0700 +++ b/src/share/vm/runtime/os.cpp Mon Sep 17 07:36:31 2012 -0400 @@ -201,14 +201,21 @@ } } - +// The mapping from OS priority back to Java priority may be inexact because +// Java priorities can map M:1 with native priorities. If you want the definite +// Java priority then use JavaThread::java_priority() OSReturn os::get_priority(const Thread* const thread, ThreadPriority& priority) { int p; int os_prio; OSReturn ret = get_native_priority(thread, &os_prio); if (ret != OS_OK) return ret; - for (p = MaxPriority; p > MinPriority && java_to_os_priority[p] > os_prio; p--) ; + if (java_to_os_priority[MaxPriority] > java_to_os_priority[MinPriority]) { + for (p = MaxPriority; p > MinPriority && java_to_os_priority[p] > os_prio; p--) ; + } else { + // niceness values are in reverse order + for (p = MaxPriority; p > MinPriority && java_to_os_priority[p] < os_prio; p--) ; + } priority = (ThreadPriority)p; return OS_OK; }