-- LogBasicInternal.mesa
-- For communication between modules of the LogBasic implementation
-- Last edited by
--   MBrown on October 3, 1982 5:37 pm


  DIRECTORY
    AlpineEnvironment,
    Log,
    LogRep;

LogBasicInternal: DEFINITIONS =
  BEGIN
  PageNumber: TYPE = AlpineEnvironment.PageNumber;
  RecordID: TYPE = Log.RecordID;

  -- Exported by LogCoreImpl

  AdvanceChunk: PROC []
    RETURNS [version: LogRep.PageVersion, pagesInChunk: INT, firstPagePtr: LONG POINTER];
    -- ! Log.Error[logFull]
    -- Allocate a new chunk for end of log, and return info about it.
    -- firstPagePtr points to first word of first page of chunk, which is pagesInChunk pages.
    -- Error[logFull] is a server crash; it does not release the log core monitor.

  ForceTo: PROC [followingRecord: RecordID];
    -- Return when all pages preceding followingRecord have been recorded on the disk.
    -- (This is NOT the same as LogBasic.Force, which must also ensure that if followingRecord
    --is the tail, then the page containing followingRecord gets cleaned up.)

  OpenCoreForPut: PROC [
    nextPage: PageNumber, version: LogRep.PageVersion, nextRecord: RecordID]
    RETURNS [pagesInChunk: INT, firstPagePtr: LONG POINTER];
    -- Must be called before first call to Put, or a horrible error will occur.

  CloseCoreForPut: PROC [];
    -- Reinitializes log core.  Caller should hold tail monitor to exclude concurrent calls
    --to AdvanceChunk.


  END.


CHANGE LOG

Created by MBrown on June 22, 1982 10:59 am

Changed by MBrown on October 2, 1982 9:11 pm
-- Changed name of module from LogPrivate.