<> DIRECTORY TiogaLocks, TiogaLocksPrivate, TiogaNode, NodeProps; TiogaLocksPrivateImpl: CEDAR MONITOR IMPORTS NodeProps EXPORTS TiogaLocksPrivate = BEGIN OPEN TiogaLocks, TiogaLocksPrivate; lastRoot: TiogaNode.RefBranchNode; lastLock: LockRef; GetLock: PUBLIC ENTRY PROC [root: TiogaNode.RefBranchNode] RETURNS [lock: LockRef] = { ENABLE UNWIND => NULL; IF root = NIL THEN RETURN [NIL]; IF root = lastRoot THEN RETURN [lastLock]; lastRoot _ root; lock _ lastLock _ NARROW[NodeProps.GetProp[root, $DocumentLock]]; IF lastLock # NIL THEN RETURN; lock _ lastLock _ NEW[LockRecord]; NodeProps.PutProp[root, $DocumentLock, lock]; }; NodeProps.Register[$DocumentLock, NodeProps.NullRead, NodeProps.NullWrite, NodeProps.NullCopy]; <> END..