<> <> <> <> <> <> <> DIRECTORY AlpineEnvironment, AlpineInternal, Coordinator, Process USING [Seconds]; CoordinatorInternal: DEFINITIONS LOCKS c USING c: Handle = BEGIN VolumeID: TYPE = AlpineEnvironment.VolumeID; Handle: TYPE = Coordinator.Handle; WorkerHandle: TYPE = Coordinator.WorkerHandle; Call: TYPE = Coordinator.Call; Results: TYPE = Coordinator.Results; SecondsTimeoutForResultsReturned: Process.Seconds = 5; SecondsWaitAfterCommFailure: INT = 15; MaxCoordinators: INT = AlpineInternal.MaxCoordinators; PassParms: PROC [p: Parms]; <> Parms: TYPE = RECORD [ proc: Call, -- the proc to call c: Handle, -- to pass transID and to monitor return of results w: WorkerHandle, -- the worker to call newTrans: AlpineEnvironment.TransID, -- used by proc = prepare only requiredOutcome: AlpineEnvironment.CommitOrAbort -- used by proc = finish only ]; ReturnResults: ENTRY PROC [c: Handle, w: WorkerHandle, r: Results] = INLINE { <> w.first.resultsOfMostRecentCall _ r; w.first.callInProgress _ none; NOTIFY c.resultsReturned; }; NoticeCoordinatorBegin: PROC [trans: AlpineEnvironment.TransID]; <> <> InitTransIDGenerator: PROC [fileStore: VolumeID]; <> NextTransID: PROC [c: Handle]; <> END. CHANGE LOG <> <> <> <> <<>>