Fix devices not being released when computer is destroyed while running.
This commit is contained in:
@@ -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--;
|
||||
|
||||
Reference in New Issue
Block a user