From 320047e1816f85786403e1399bccd68b536e44c3 Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Fri, 16 Jan 2026 14:40:02 -0500 Subject: [PATCH 1/2] test: fix race in emulator controller --- .../bigtable/emulator/core/EmulatorController.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/google-cloud-bigtable-emulator-core/src/main/java/com/google/cloud/bigtable/emulator/core/EmulatorController.java b/google-cloud-bigtable-emulator-core/src/main/java/com/google/cloud/bigtable/emulator/core/EmulatorController.java index 5ae045c8f7..4f3309f1b5 100644 --- a/google-cloud-bigtable-emulator-core/src/main/java/com/google/cloud/bigtable/emulator/core/EmulatorController.java +++ b/google-cloud-bigtable-emulator-core/src/main/java/com/google/cloud/bigtable/emulator/core/EmulatorController.java @@ -43,8 +43,8 @@ public class EmulatorController { private static final Logger LOGGER = Logger.getLogger(EmulatorController.class.getName()); private final Path executable; - private Process process; - private boolean isStopped = true; + private volatile Process process; + private volatile boolean isStopped = true; private Thread shutdownHook; private int port; @@ -134,9 +134,11 @@ public synchronized void start(int port) shutdownHook = new Thread( () -> { - if (!isStopped) { - isStopped = true; - process.destroy(); + synchronized (EmulatorController.this) { + if (!isStopped) { + isStopped = true; + process.destroy(); + } } }); From f7306e90fe281a347132aab7352ee85419766faf Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Fri, 16 Jan 2026 18:43:27 -0500 Subject: [PATCH 2/2] fix --- .../cloud/bigtable/emulator/core/EmulatorController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/google-cloud-bigtable-emulator-core/src/main/java/com/google/cloud/bigtable/emulator/core/EmulatorController.java b/google-cloud-bigtable-emulator-core/src/main/java/com/google/cloud/bigtable/emulator/core/EmulatorController.java index 4f3309f1b5..d39c263faf 100644 --- a/google-cloud-bigtable-emulator-core/src/main/java/com/google/cloud/bigtable/emulator/core/EmulatorController.java +++ b/google-cloud-bigtable-emulator-core/src/main/java/com/google/cloud/bigtable/emulator/core/EmulatorController.java @@ -43,8 +43,8 @@ public class EmulatorController { private static final Logger LOGGER = Logger.getLogger(EmulatorController.class.getName()); private final Path executable; - private volatile Process process; - private volatile boolean isStopped = true; + private Process process; + private boolean isStopped = true; private Thread shutdownHook; private int port; @@ -137,9 +137,9 @@ public synchronized void start(int port) synchronized (EmulatorController.this) { if (!isStopped) { isStopped = true; - process.destroy(); } } + process.destroy(); }); Runtime.getRuntime().addShutdownHook(shutdownHook);