Fix devices not being released when computer is destroyed while running.

This commit is contained in:
Florian Nücke
2022-01-30 15:10:21 +01:00
parent ab69c6977a
commit d6a93605a8

View File

@@ -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--;