-- RTSponge.Mesa -- last edited December 6, 1982 12:42 pm by Paul Rovner DIRECTORY Process USING[Priority], ProcessPriorities USING[priorityPageFaultHigh]; RTSponge: DEFINITIONS LOCKS Lock = BEGIN Lock: MONITORLOCK; SpongeNeeded: CONDITION; SpongeRunning: CONDITION; SpongeFinished: CONDITION; SpongeEnabled: CONDITION; spongePriority: Process.Priority = ProcessPriorities.priorityPageFaultHigh; useCount: CARDINAL; spongeRunning: BOOLEAN; spongeDisabled: BOOLEAN; StartSponge: ENTRY PROC = INLINE {WHILE spongeDisabled DO WAIT SpongeEnabled ENDLOOP; useCount _ useCount + 1; IF useCount = 1 THEN NOTIFY SpongeNeeded; UNTIL spongeRunning DO WAIT SpongeRunning; ENDLOOP}; StopSponge: ENTRY PROC = INLINE {IF useCount = 0 THEN ERROR; useCount _ useCount - 1; IF useCount = 0 THEN NOTIFY SpongeFinished}; -- used by the checkpointproc Disable: ENTRY PROC = INLINE {UNTIL useCount = 0 DO WAIT SpongeFinished ENDLOOP; spongeDisabled _ TRUE}; -- used by the checkpointproc Enable: ENTRY PROC = INLINE {IF NOT spongeDisabled THEN ERROR; spongeDisabled _ FALSE; BROADCAST SpongeEnabled}; END. ʘJš|ÏcIœÏk œ žœ!žœ$ž œžœžœ ž œž œž œž œž œ`žœžœžœÏn œžœžœžœžœžœžœžœ'žœžœžœžœžœžœžœŸ œžœžœžœžœžœžœ'žœžœžœœŸœžœžœžœžœžœžœžœžœœŸœžœžœžœžœžœžœžœžœž œžœ˜º —…—¼Ü