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
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.