/** * @param lockType TYPE_SHARED, TYPE_UPGRADABLE, or TYPE_EXCLUSIVE */ void detectDeadlock(_Locker locker, int lockType, long nanosTimeout) throws DeadlockException { _DeadlockDetector detector = new _DeadlockDetector(locker); if (detector.scan()) { Object att = findOwnerAttachment(locker, lockType); throw new DeadlockException(nanosTimeout, att, detector.mGuilty, detector.newDeadlockSet(lockType)); } }
/** * @param waitingFor should not be not null * @param lockType TYPE_SHARED, TYPE_UPGRADABLE, or TYPE_EXCLUSIVE */ private void detectDeadlock(_Lock waitingFor, int lockType, long nanosTimeout, int hash) throws DeadlockException { _DeadlockDetector detector = new _DeadlockDetector(this); if (detector.scan()) { Object att = waitingFor == null ? null : waitingFor.findOwnerAttachment(this, lockType, hash); throw new DeadlockException(nanosTimeout, att, detector.mGuilty, detector.newDeadlockSet(lockType, hash)); } }
/** * @param lockType TYPE_SHARED, TYPE_UPGRADABLE, or TYPE_EXCLUSIVE */ void detectDeadlock(_Locker locker, int lockType, long nanosTimeout) throws DeadlockException { _DeadlockDetector detector = new _DeadlockDetector(locker); if (detector.scan()) { Object att = findOwnerAttachment(locker, lockType); throw new DeadlockException(nanosTimeout, att, detector.mGuilty, detector.newDeadlockSet(lockType)); } }
/** * @param lockType type of lock requested; TYPE_SHARED, TYPE_UPGRADABLE, or TYPE_EXCLUSIVE */ DeadlockSet newDeadlockSet(int lockType) { DeadlockSet.OwnerInfo[] infoSet = new DeadlockSet.OwnerInfo[mLocks.size()]; final _LockManager manager = mOrigin.mManager; int i = 0; for (_Lock lock : mLocks) { DeadlockSet.OwnerInfo info = new DeadlockSet.OwnerInfo(); infoSet[i] = info; info.mIndexId = lock.mIndexId; Index ix = manager.indexById(info.mIndexId); if (ix != null) { info.mIndexName = ix.getName(); } byte[] key = lock.mKey; if (key != null) { key = key.clone(); } info.mKey = key; info.mAttachment = lock.findOwnerAttachment(mOrigin, lockType); i++; } return new DeadlockSet(infoSet); }
/** * @param lockType type of lock requested; TYPE_SHARED, TYPE_UPGRADABLE, or TYPE_EXCLUSIVE * @param hash hash of lock key requested */ DeadlockSet newDeadlockSet(int lockType, int hash) { DeadlockSet.OwnerInfo[] infoSet = new DeadlockSet.OwnerInfo[mLocks.size()]; final _LockManager manager = mOrigin.mManager; int i = 0; for (_Lock lock : mLocks) { DeadlockSet.OwnerInfo info = new DeadlockSet.OwnerInfo(); infoSet[i] = info; info.mIndexId = lock.mIndexId; Index ix = manager.indexById(info.mIndexId); if (ix != null) { info.mIndexName = ix.getName(); } byte[] key = lock.mKey; if (key != null) { key = key.clone(); } info.mKey = key; info.mAttachment = lock.findOwnerAttachment(mOrigin, lockType, hash); i++; } return new DeadlockSet(infoSet); }
/** * @param lockType type of lock requested; TYPE_SHARED, TYPE_UPGRADABLE, or TYPE_EXCLUSIVE */ DeadlockSet newDeadlockSet(int lockType) { DeadlockSet.OwnerInfo[] infoSet = new DeadlockSet.OwnerInfo[mLocks.size()]; final _LockManager manager = mOrigin.mManager; int i = 0; for (_Lock lock : mLocks) { DeadlockSet.OwnerInfo info = new DeadlockSet.OwnerInfo(); infoSet[i] = info; info.mIndexId = lock.mIndexId; Index ix = manager.indexById(info.mIndexId); if (ix != null) { info.mIndexName = ix.getName(); } byte[] key = lock.mKey; if (key != null) { key = key.clone(); } info.mKey = key; info.mAttachment = lock.findOwnerAttachment(mOrigin, lockType); i++; } return new DeadlockSet(infoSet); }
: waitingFor.findOwnerAttachment(this, lockType); return new LockTimeoutException(nanosTimeout, att);
: waitingFor.findOwnerAttachment(this, lockType); return new LockTimeoutException(nanosTimeout, att);
: waitingFor.findOwnerAttachment(this, lockType, hash); return new LockTimeoutException(nanosTimeout, att);
ht.acquireShared(); try { return findOwnerAttachment(null, lockType); } finally { ht.releaseShared();
ht.acquireShared(); try { return findOwnerAttachment(null, lockType, hash); } finally { ht.releaseShared();
ht.acquireShared(); try { return findOwnerAttachment(null, lockType); } finally { ht.releaseShared();