<> <> <> <> <> <> <> <> DIRECTORY Camelot, YggDID, YggEnvironment, YggInternal; YggLock: CEDAR DEFINITIONS = BEGIN LockID: TYPE = YggInternal.LockID; LockSubID: TYPE = YggInternal.LockSubID; nullLockID: LockID = YggInternal.nullLockID; LockMode: TYPE = YggEnvironment.LockMode; MakeLockID: PROC [did: YggDID.DID] RETURNS [lock: LockID]; <> Set: PROC [ trans: YggEnvironment.TransID, lock: LockID, mode: LockMode, wait: BOOL _ FALSE] RETURNS [granted: BOOL]; <> <> <> <> ModeReleasableSet: TYPE = PACKED ARRAY LockMode OF ModeReleasable; ModeReleasable: TYPE = {no, yes} _ no; Release: PROC [trans: YggEnvironment.TransID, lock: LockID, mode: LockMode] RETURNS [released: BOOL]; <> <> ReleaseTransactionLocks: PROC [trans: YggEnvironment.TransID] RETURNS [numberReleased: INT]; <> <> Error: ERROR [type: ErrorType]; ErrorType: TYPE = {lockUnreleasable, unknown, unknownLock}; Failed: ERROR [why: YggEnvironment.LockFailure]; <<{conflict, timeout}>> TransAborting: ERROR; END. <> <> <<>>