DIRECTORY Process USING [ConditionPointer, EnableAborts, InitializeCondition, SecondsToTicks]; AbortLockTest: CEDAR MONITOR IMPORTS Process = BEGIN change: CONDITION; wait: BOOL ¬ FALSE; unwinds: ARRAY Where OF BOOL ¬ ALL[FALSE]; Where: TYPE = {inner, inside, call}; OuterReEnter: PROC [x: NAT] = { ENABLE UNWIND => EnterAndSet[x]; Enter[]; }; OuterEnter: PROC = { Enter[!UNWIND => unwinds[call] ¬ TRUE]; }; Enter: ENTRY PROC = { ENABLE UNWIND => {unwinds[inside] ¬ TRUE}; Inner[]; }; Inner: INTERNAL PROC = { ENABLE UNWIND => {unwinds[inner] ¬ TRUE}; WHILE wait DO WAIT change ENDLOOP; }; EnterAndSet: ENTRY PROC [x: NAT] = {memory ¬ x}; memory: NAT ¬ 0; Start: PROC = TRUSTED { cp: Process.ConditionPointer = @change; Process.InitializeCondition[cp, Process.SecondsToTicks[15]]; Process.EnableAborts[cp]; }; Start[]; END. ¨ AbortLockTest.Mesa Copyright Σ 1991 by Xerox Corporation. All rights reserved. Spreitzer, August 28, 1985 10:19:13 pm PDT JKF January 11, 1989 10:06:07 am PST Κϊ•NewlineDelimiter –(cedarcode) style™code™Kšœ Οeœ1™