DIRECTORY AlpineEnvironment, AlpineInternal, Process; LockControl: DEFINITIONS = BEGIN Initialize: PROC [lockZoneInitialSize: INT, hashArraySize: NAT]; ForkWatchdogProcess: PROC [ wakeupPeriod: Process.Milliseconds, abortWaitingRequestInterval: INT--seconds--, abortInactiveGrantedRequestInterval: INT--seconds--]; ConsTransHeader: PROC [trans: AlpineInternal.TransHandle] RETURNS [lockHeader: AlpineInternal.LockTransHeaderHandle]; AbortWaitingRequests: PROC [trans: AlpineInternal.TransHandle]; UpgradeLocks: PROC [trans: AlpineInternal.TransHandle]; ReleaseLocks: PROC [trans: AlpineInternal.TransHandle]; TransferLocks: PROC [from, to: AlpineInternal.TransHandle]; END. LockControl.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Last edited by MBrown on January 24, 1983 4:30 pm Hauser, March 8, 1985 10:40:03 am PST LockWatchdogProcess will wake up every wakeupPeriod milliseconds. It will abort any transaction with a waiting lock request older than abortWaitingRequestInterval seconds. It will abort any transaction T that has had no activity for the past abortInactiveGrantedRequestInterval seconds, if T holds a lock that blocks the progress of another transaction. ! (None) Cause all waiting lock requests for trans to fail, raising Lock.TransAborting. ! Lock.Failed[timeout], Lock.TransAborting For all update (intendUpdate, ...) locks l held in trans, convert l to a write (intendWrite, ...) lock. Must not call with lock requests waiting. ! (None) For all locks l held in trans, release l. Must not call with lock requests waiting. ! (None) Make "from"'s lock structure reference "to", instead. Hauser, March 8, 1985 10:39:43 am PST Nodified, added copyright. Ê ˜šœ™Icodešœ Ïmœ1™<—šœ™Jšœ"™"K™%—J˜šÏk ˜ J˜J˜J˜J˜J˜—Jšœ ž œž˜ ˜JšÏn œžœžœžœ˜@J˜šŸœžœ˜J˜#JšœžÏc œ˜,Jšœ%ž  œ˜5JšœA™AJšœD™DJšœ$™$JšœE™EJšœC™CJšœ+™+J˜—šŸœžœ$˜9Jšžœ4˜;J˜—šŸœžœ%˜?Jšœ™JšœN™NJ˜—šŸ œžœ%˜7Jšœ*™*JšœN™NJšœ™Jšœ)™)J˜—šŸ œžœ%˜7Jšœ™Jšœ)™)Jšœ)™)J˜—šŸ œžœ(˜;Jšœ™Jšœ5™5J˜—Jšžœ˜—™%K™—K™—…—®P