org.apache.derby.impl.services.locks
Class ConcurrentLockSet.Entry

java.lang.Object
  extended by org.apache.derby.impl.services.locks.ConcurrentLockSet.Entry
Enclosing class:
ConcurrentLockSet

private static final class ConcurrentLockSet.Entry
extends java.lang.Object

Class representing an entry in the lock table.


Field Summary
(package private)  Control control
          The lock control.
private  java.util.concurrent.locks.Condition deadlockDetection
          Condition variable which prevents calls to lock() from locking the entry.
private  java.util.concurrent.locks.ReentrantLock mutex
          Mutex used to ensure single-threaded access to the LockControls.
 
Constructor Summary
private ConcurrentLockSet.Entry()
           
 
Method Summary
(package private)  void enterDeadlockDetection()
          Notify that the lock request that is currently accessing the entry will be entering deadlock detection.
(package private)  void exitDeadlockDetection()
          Notify that the deadlock detection triggered by the current thread has finished.
(package private)  void lock()
          Lock the entry, ensuring exclusive access to the contained Control object.
(package private)  void lockForDeadlockDetection()
          Lock the entry while performing deadlock detection.
(package private)  void unlock()
          Unlock the entry, allowing other threads to lock and access the contained Control object.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

control

Control control
The lock control.


mutex

private final java.util.concurrent.locks.ReentrantLock mutex
Mutex used to ensure single-threaded access to the LockControls. To avoid Java deadlocks, no thread should ever hold the mutex of more than one entry. Excepted from this requirement is a thread which performs deadlock detection. During deadlock detection, a thread might hold several mutexes, but it is not allowed to hold any mutex when entering the deadlock detection. Only one thread is allowed to perform deadlock detection at a time.


deadlockDetection

private java.util.concurrent.locks.Condition deadlockDetection
Condition variable which prevents calls to lock() from locking the entry. If it is not null, only the thread performing deadlock detection may lock the entry (by calling lockForDeadlockDetection()).

Constructor Detail

ConcurrentLockSet.Entry

private ConcurrentLockSet.Entry()
Method Detail

lock

void lock()
Lock the entry, ensuring exclusive access to the contained Control object. The call will block until the entry can be locked. If the entry is unlocked and deadlockDetection is not null, the entry belongs to a thread which waits for deadlock detection to be initiated, and the call will block until that thread has finished its deadlock detection.


unlock

void unlock()
Unlock the entry, allowing other threads to lock and access the contained Control object.


lockForDeadlockDetection

void lockForDeadlockDetection()
Lock the entry while performing deadlock detection. This method will lock the entry even when deadlockDetection is not null. If deadlockDetection is not null, we know the entry and its Control will not be accessed by others until we have finished the deadlock detection, so it's OK for us to access it.


enterDeadlockDetection

void enterDeadlockDetection()
Notify that the lock request that is currently accessing the entry will be entering deadlock detection. Unlock the entry to allow the current thread or other threads to lock the entry for deadlock detection, but set the condition variable to prevent regular locking of the entry.


exitDeadlockDetection

void exitDeadlockDetection()
Notify that the deadlock detection triggered by the current thread has finished. Re-lock the entry and notify any waiters that the deadlock detection has completed.


Built on Thu 2012-03-29 21:53:33+0000, from revision ???

Apache Derby V10.6 Internals - Copyright © 2004,2007 The Apache Software Foundation. All Rights Reserved.