📄 edgechasing.java
字号:
// You can redistribute this software and/or modify it under the terms of// the Ozone Core License version 1 published by ozone-db.org.//// The original code and portions created by SMB are// Copyright (C) 1997-2000 by SMB GmbH. All rights reserved.//// $Id: EdgeChasing.java,v 1.5 2000/10/28 16:55:18 daniela Exp $package org.ozoneDB.core.dr;import org.ozoneDB.DxLib.*;import org.ozoneDB.core.*;import org.ozoneDB.util.*;/** * @author <a href="http://www.softwarebuero.de/">SMB</a> * @version $Revision: 1.5 $Date: 2000/10/28 16:55:18 $ */public final class EdgeChasing extends DeadlockRecognition { protected Env env; public EdgeChasing( Env _env ) { env = _env; } public Locker detectDeadlock( Locker locker ) { env.logWriter.newEntry( this, "*** detectDeadlock(): " + locker, LogWriter.DEBUG ); return sendLockMessage( locker, locker, true ) ? locker : null; } /** * Recursive deadlock recognition. * @return True, if this transaction is blocked by root (?) */ public boolean sendLockMessage( Locker root, Locker locker, boolean firstLevel ) { env.logWriter.newEntry( this, "*** sendLockMessage(): " + locker, LogWriter.DEBUG ); Lockable blocker = locker.blockedBy(); if (blocker == null) { return false; } if (!firstLevel) { if (root == locker) { return true; } if (blocker == null) { return false; } } //bin selbst beim warten auf blocker blockiert; wenn ich //lese-lock setzen moechte, muss ich die ta mit schreib-lock //auf blocker kontrollieren; wenn schreib-lock alle ta mit //lese-lock auf blocker - diese werden genau von allLockers() //geliefert //alle ta, die mich behindern; entweder ein schreibende oder //viele lesende transaktionen DxCollection lockers = blocker.allLockers(); if (lockers != null) { DxIterator it = lockers.iterator(); while (it.next() != null) { Locker nextLocker = (Locker)it.object(); if (nextLocker != locker) { //we are done if we have detected the first circle; //go on with next candidate otherwise if (sendLockMessage( root, nextLocker, false ) == true) { return true; } } } } return false; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -