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;
 }