-- RestartFileImpl.mesa -- Last edited by -- MBrown on January 30, 1984 5:50:55 pm PST DIRECTORY AlpineEnvironment, AlpineInternal, FileMap, FilePageMgr, Log, LogRep, RestartFile; RestartFileImpl: MONITOR IMPORTS FileMap, FilePageMgr EXPORTS RestartFile = BEGIN VolumeID: TYPE = AlpineEnvironment.VolumeID; FileID: TYPE = AlpineEnvironment.FileID; RecordID: TYPE = Log.RecordID; WordNumber: TYPE = INT; restartFileHandle: FileMap.Handle ← NIL; EstablishRestartFile: PUBLIC ENTRY PROC [volume: VolumeID, restartFile: FileID] = { restartFileHandle ← FileMap.Register[volumeID: volume, fileID: restartFile]; IF FilePageMgr.GetSize[restartFileHandle] # 1 THEN ERROR; }; ReadRestartRecord: PUBLIC ENTRY PROC [] RETURNS [ wordNumberForCheckpointCompleteRecord: WordNumber, recordIDForCheckpointCompleteRecord: RecordID] = { chunk: FilePageMgr.VMPageSet ← FilePageMgr.ReadPages[fileHandle: restartFileHandle, pageRun: [firstPage: 0, count: 1]]; { restartRecord: LONG POINTER TO LogRep.RestartRecord = LOOPHOLE[chunk.pages]; [wordNumberForCheckpointCompleteRecord, recordIDForCheckpointCompleteRecord] ← restartRecord↑; }; FilePageMgr.ReleaseVMPageSet[vMPageSet: chunk, releaseState: clean, keep: FALSE]; }; WriteRestartRecord: PUBLIC ENTRY PROC [ wordNumberForCheckpointCompleteRecord: WordNumber, recordIDForCheckpointCompleteRecord: RecordID] = { chunk: FilePageMgr.VMPageSet ← FilePageMgr.UsePages[fileHandle: restartFileHandle, pageRun: [firstPage: 0, count: 1]]; { restartRecord: LONG POINTER TO LogRep.RestartRecord = LOOPHOLE[chunk.pages]; restartRecord↑ ← [wordNumberForCheckpointCompleteRecord, recordIDForCheckpointCompleteRecord]; }; FilePageMgr.ReleaseVMPageSet[ vMPageSet: chunk, releaseState: writeIndividualWait, keep: FALSE]; }; END. CHANGE LOG Created by MBrown on September 23, 1982 1:41 pm Changed by MBrown on October 10, 1982 9:44 pm -- Added myFileStore parm to Read/WriteRestartRecord. Changed by MBrown on October 14, 1982 2:40 pm -- Removed myFileStore parm to Read/WriteRestartRecord (now log this as part of --each checkpointComplete log record).