Copyright (C) 1994, Digital Equipment Corp.
by Steve Glassman, Mark Manasse and Greg Nelson
<*PRAGMA LL*>
MODULE TrestleClass;
IMPORT Trestle, TrestleComm;
TYPE CCList = REF RECORD cc: ConnectClosure; link: CCList END;
VAR cclist: CCList := NIL; mu := NEW(MUTEX);
PROCEDURE Connect(
inst: TEXT := NIL;
localOnly: BOOLEAN := FALSE)
: Trestle.T
RAISES {TrestleComm.Failure} =
VAR ccl: CCList; res: Trestle.T;
BEGIN
LOCK mu DO ccl := cclist END;
WHILE ccl # NIL DO
IF ccl.cc.apply(inst, localOnly, res) THEN RETURN res END;
ccl := ccl.link
END;
RAISE TrestleComm.Failure
END Connect;
PROCEDURE RegisterConnectClosure(cc: ConnectClosure) =
BEGIN
LOCK mu DO
cclist := NEW(CCList, cc := cc, link := cclist)
END
END RegisterConnectClosure;
BEGIN
connectMu := NEW(MUTEX);
closeMu := NEW(MUTEX)
END TrestleClass.