--- a/hotspot/src/os/solaris/vm/os_solaris.cpp Fri Jul 04 11:46:01 2014 +0200
+++ b/hotspot/src/os/solaris/vm/os_solaris.cpp Mon Jul 14 10:15:21 2014 -0400
@@ -3174,20 +3174,14 @@
}
}
-// Caveat: Solaris os::yield() causes a thread-state transition whereas
-// the linux and win32 implementations do not. This should be checked.
-
-void os::yield() {
- // Yields to all threads with same or greater priority
- os::sleep(Thread::current(), 0, false);
-}
-
// Note that yield semantics are defined by the scheduling class to which
// the thread currently belongs. Typically, yield will _not yield to
// other equal or higher priority threads that reside on the dispatch queues
// of other CPUs.
-os::YieldResult os::NakedYield() { thr_yield(); return os::YIELD_UNKNOWN; }
+void os::naked_yield() {
+ thr_yield();
+}
// Interface for setting lwp priorities. If we are using T2 libthread,
// which forces the use of BoundThreads or we manually set UseBoundThreads,
@@ -5441,20 +5435,11 @@
return abstime;
}
-// Test-and-clear _Event, always leaves _Event set to 0, returns immediately.
-// Conceptually TryPark() should be equivalent to park(0).
-
-int os::PlatformEvent::TryPark() {
- for (;;) {
- const int v = _Event;
- guarantee((v == 0) || (v == 1), "invariant");
- if (Atomic::cmpxchg(0, &_Event, v) == v) return v;
- }
-}
-
void os::PlatformEvent::park() { // AKA: down()
// Invariant: Only the thread associated with the Event/PlatformEvent
// may call park().
+ assert(_nParked == 0, "invariant");
+
int v;
for (;;) {
v = _Event;
@@ -5541,8 +5526,7 @@
// 1 :=> 1
// -1 :=> either 0 or 1; must signal target thread
// That is, we can safely transition _Event from -1 to either
- // 0 or 1. Forcing 1 is slightly more efficient for back-to-back
- // unpark() calls.
+ // 0 or 1.
// See also: "Semaphores in Plan 9" by Mullender & Cox
//
// Note: Forcing a transition from "-1" to "1" on an unpark() means
@@ -5746,10 +5730,9 @@
}
void Parker::unpark() {
- int s, status;
- status = os::Solaris::mutex_lock(_mutex);
+ int status = os::Solaris::mutex_lock(_mutex);
assert(status == 0, "invariant");
- s = _counter;
+ const int s = _counter;
_counter = 1;
status = os::Solaris::mutex_unlock(_mutex);
assert(status == 0, "invariant");