From 42deaafc7082d42f5114134744e5fdd01cc93ad7 Mon Sep 17 00:00:00 2001 From: Michael FIG Date: Fri, 6 Mar 2020 13:04:56 -0600 Subject: [PATCH] fix: anachrophobia should crash hard Closes #68 Now the SwingSet kernel will not proceed if there is anachrophobia. The cases that cause this still need to be diagnosed, but at least we won't have easily-overlooked failures. --- packages/SwingSet/src/kernel/vatManager.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/SwingSet/src/kernel/vatManager.js b/packages/SwingSet/src/kernel/vatManager.js index 839fe628114..94cf4f97a95 100644 --- a/packages/SwingSet/src/kernel/vatManager.js +++ b/packages/SwingSet/src/kernel/vatManager.js @@ -212,13 +212,15 @@ export default function makeVatManager( return harden({ ...ret, slots: retSlots }); } + let replayAbandonShip; function replay(name, ...args) { const s = playbackSyscalls.shift(); if (djson.stringify(s.d) !== djson.stringify([name, ...args])) { console.log(`anachrophobia strikes vat ${vatID}`); console.log(`expected:`, djson.stringify(s.d)); console.log(`got :`, djson.stringify([name, ...args])); - throw new Error(`historical inaccuracy in replay-${name}`); + replayAbandonShip = new Error(`historical inaccuracy in replay-${name}`); + throw replayAbandonShip; } return s.response; } @@ -375,6 +377,10 @@ export default function makeVatManager( inReplay = true; for (const t of vatKeeper.getTranscript()) { + if (replayAbandonShip) { + // We really failed to start. + throw replayAbandonShip; + } playbackSyscalls = Array.from(t.syscalls); // eslint-disable-next-line no-await-in-loop await doProcess( @@ -384,6 +390,11 @@ export default function makeVatManager( )}]`, ); } + + if (replayAbandonShip) { + // We really failed to start. + throw replayAbandonShip; + } inReplay = false; }