From 12847643a9df953ea0600e64a464d3f9b7f3b2e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Thu, 13 Jan 2022 15:29:06 +0100 Subject: [PATCH] Ensure worker is synced up when making structural changes to VM. Fixes #93. --- .../java/li/cil/oc2/common/vm/VMDeviceBusAdapter.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/li/cil/oc2/common/vm/VMDeviceBusAdapter.java b/src/main/java/li/cil/oc2/common/vm/VMDeviceBusAdapter.java index 26d7cac1..f4aefaf7 100644 --- a/src/main/java/li/cil/oc2/common/vm/VMDeviceBusAdapter.java +++ b/src/main/java/li/cil/oc2/common/vm/VMDeviceBusAdapter.java @@ -63,6 +63,8 @@ public final class VMDeviceBusAdapter { } public void unmount() { + globalContext.joinWorkerThread(); + for (final VMDevice device : deviceContexts.keySet()) { device.unmount(); } @@ -71,6 +73,8 @@ public final class VMDeviceBusAdapter { } public void suspend() { + globalContext.joinWorkerThread(); + for (final VMDevice device : deviceContexts.keySet()) { device.suspend(); } @@ -79,6 +83,8 @@ public final class VMDeviceBusAdapter { } public void addDevices(final Collection devices) { + globalContext.joinWorkerThread(); + for (final Device device : devices) { if (device instanceof final VMDevice vmDevice) { final ManagedVMContext context = deviceContexts.put(vmDevice, null); @@ -92,6 +98,8 @@ public final class VMDeviceBusAdapter { } public void removeDevices(final Collection devices) { + globalContext.joinWorkerThread(); + for (final Device device : devices) { if (device instanceof final VMDevice vmDevice) { vmDevice.unmount();