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. j AbortLockTest.Mesa Spreitzer, August 28, 1985 10:19:13 pm PDT JKF January 11, 1989 10:06:07 am PST Κκ•NewlineDelimiter – "cedar" style™code™Kšœ'Οk™*Kšœ!™$—J˜š ˜ JšœœG˜T—K˜K˜šΡbnx œœ˜Kšœ ˜—K˜Kš˜K˜Kšœ œ˜Kšœœœ˜Kš œ œœœœœ˜*Kšœœ˜$K˜šΟn œœœ˜Kšœœ˜ K˜K˜—K˜šŸ œœ˜Kšœœœ˜'K˜—K˜šŸœœœ˜Kšœœœ˜*K˜K˜—K˜šŸœœœ˜Kšœœœ˜)Kšœœœœ˜"K˜—K˜KšŸ œœœœ˜0Kšœœ˜K˜šŸœœœ˜K˜'K˜