diff --git a/src/main/java/li/cil/oc2/common/vm/AbstractVirtualMachine.java b/src/main/java/li/cil/oc2/common/vm/AbstractVirtualMachine.java index 584b3fc9..38da133b 100644 --- a/src/main/java/li/cil/oc2/common/vm/AbstractVirtualMachine.java +++ b/src/main/java/li/cil/oc2/common/vm/AbstractVirtualMachine.java @@ -163,16 +163,7 @@ public abstract class AbstractVirtualMachine implements VirtualMachine { @Override public void stop() { - switch (runState) { - case LOADING_DEVICES -> setRunState(VMRunState.STOPPED); - case RUNNING -> stopRunnerAndReset(); - } - } - - private void joinWorkerThread() { - if (runner != null) { - runner.join(); - } + stopRunnerAndReset(); } public void pauseAndReload() { @@ -190,19 +181,6 @@ public abstract class AbstractVirtualMachine implements VirtualMachine { state.rpcAdapter.resume(busController, didDevicesChange); } - protected void stopRunnerAndReset() { - joinWorkerThread(); - setRunState(VMRunState.STOPPED); - - state.board.setRunning(false); - state.board.reset(); - state.rpcAdapter.reset(); - state.rpcAdapter.disposeDevices(); - state.vmAdapter.disposeDevices(); - - runner = null; - } - public void tick() { busController.scan(); setBusState(busController.getState()); @@ -284,8 +262,27 @@ public abstract class AbstractVirtualMachine implements VirtualMachine { setBootError(message); } + protected void stopRunnerAndReset() { + joinWorkerThread(); + setRunState(VMRunState.STOPPED); + + state.board.setRunning(false); + state.board.reset(); + state.rpcAdapter.reset(); + state.rpcAdapter.disposeDevices(); + state.vmAdapter.disposeDevices(); + + runner = null; + } + /////////////////////////////////////////////////////////////////// + private void joinWorkerThread() { + if (runner != null) { + runner.join(); + } + } + private void load() { if (loadDevicesDelay > 0) { loadDevicesDelay--;