hotspot/src/share/vm/runtime/objectMonitor.cpp
inline void ObjectMonitor::DequeueSpecificWaiter(ObjectWaiter* node) {
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(node != NULL, "should not dequeue NULL node");
assert(node->_prev != NULL, "node already removed from list");
assert(node->_next != NULL, "node already removed from list");
{- -------------------------------------------
(1) 引数で渡された ObjectWaiter (以下の node) を,
待ちキュー(_WaitSet)内から削除する.
---------------------------------------- -}
// when the waiter has woken up because of interrupt,
// timeout or other spurious wake-up, dequeue the
// waiter from waiting list
ObjectWaiter* next = node->_next;
if (next == node) {
assert(node->_prev == node, "invariant check");
_WaitSet = NULL;
} else {
ObjectWaiter* prev = node->_prev;
assert(prev->_next == node, "invariant check");
assert(next->_prev == node, "invariant check");
next->_prev = prev;
prev->_next = next;
if (_WaitSet == node) {
_WaitSet = next;
}
}
node->_next = NULL;
node->_prev = NULL;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.