EstablishTransactionContext:
PUBLIC
PROCEDURE [transID: YggEnvironment.TransID, work: YggTransContext.TransactionWork] = {
trans: YggTransactionMap.TransHandle = YggTransactionMap.GetTransHandle[transID];
IF trans = YggTransactionMap.nullTransHandle
OR ~YggTransactionMap.StartWork[trans]
THEN
ERROR YggNav.Error[[$invalidTrans, "invalid transaction"]];
{
ENABLE
Public error. Clean up local state and then allow signal to propagate. n.b. this does the right thing only for ERRORs, not SIGNALs.
YggNav.Error =>
YggTransactionMap.StopWork[trans];
{
-- extra nesting so errors raised from
EXITS clause are caught by the
ENABLE
work[trans: trans ];
};
};
YggTransactionMap.StopWork[trans];
};