<> <> <> <> <> <> <> <> DIRECTORY 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: YggInternal.TransHandle, lock: LockID, mode: LockMode, wait: BOOL _ FALSE] RETURNS [resultMode: LockMode]; <> <> <> <> <> <> <> <> <> <> ModeReleasableSet: TYPE = PACKED ARRAY LockMode OF ModeReleasable; ModeReleasable: TYPE = {no, yes} _ no; Release: PROC [trans: YggInternal.TransHandle, lock: LockID, releasable: ModeReleasableSet _ [read: yes]] RETURNS [LockMode]; <> <> <> <> <> <> <> <> <> <> <> ReleaseFileLocks: PROC [trans: YggInternal.TransHandle, prototype: LockID, releasable: ModeReleasableSet]; <> Compat: READONLY ARRAY LockMode OF PACKED ARRAY LockMode OF BOOL; <> <> Sup: READONLY ARRAY LockMode OF PACKED ARRAY LockMode OF LockMode; <> <> <> Error: ERROR [type: ErrorType]; ErrorType: TYPE = {lockUnreleasable, unknown}; Failed: ERROR [why: YggEnvironment.LockFailure]; <<{conflict, timeout}>> TransAborting: ERROR; END. <> <> <<>>