From d34519d6701c8992ac9d6de4e002cb07da1eca63 Mon Sep 17 00:00:00 2001 From: Kevin Cooney Date: Fri, 5 Sep 2025 22:32:40 -0700 Subject: [PATCH 1/2] Call NetworkTableInstance.waitForListenerQueue() before close() This works around a race condition where a listener registered by Preferences was called after the NetworkTableInstance was closed. --- .../lib2813/preferences/IsolatedPreferences.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/src/test/java/com/team2813/lib2813/preferences/IsolatedPreferences.java b/lib/src/test/java/com/team2813/lib2813/preferences/IsolatedPreferences.java index b33af67e..fed8a584 100644 --- a/lib/src/test/java/com/team2813/lib2813/preferences/IsolatedPreferences.java +++ b/lib/src/test/java/com/team2813/lib2813/preferences/IsolatedPreferences.java @@ -3,9 +3,6 @@ import edu.wpi.first.networktables.NetworkTable; import edu.wpi.first.networktables.NetworkTableInstance; import edu.wpi.first.wpilibj.Preferences; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; import org.junit.rules.ExternalResource; /** @@ -13,8 +10,6 @@ * tests. */ public final class IsolatedPreferences extends ExternalResource { - private static final ScheduledExecutorService CLOSE_EXECUTOR = - Executors.newSingleThreadScheduledExecutor(); private NetworkTableInstance tempInstance; /** Gets the {@link NetworkTable} that contains the preference values. */ @@ -31,7 +26,12 @@ protected void before() { @Override protected void after() { + if (!tempInstance.waitForListenerQueue(.1)) { + System.err.println( + "Timed out waiting for the NetworkTableInstance listener queue to empty (waited 100ms);" + + " JVM may crash"); + } Preferences.setNetworkTableInstance(NetworkTableInstance.getDefault()); - CLOSE_EXECUTOR.schedule(() -> tempInstance.close(), 10, TimeUnit.MILLISECONDS); + tempInstance.close(); } } From b13cc4cd59c0533822313a7841dbb63bd4f76094 Mon Sep 17 00:00:00 2001 From: Kevin Cooney Date: Fri, 5 Sep 2025 23:13:31 -0700 Subject: [PATCH 2/2] Call NetworkTableInstance.startLocal() --- .../com/team2813/lib2813/preferences/IsolatedPreferences.java | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/src/test/java/com/team2813/lib2813/preferences/IsolatedPreferences.java b/lib/src/test/java/com/team2813/lib2813/preferences/IsolatedPreferences.java index fed8a584..c99bde0a 100644 --- a/lib/src/test/java/com/team2813/lib2813/preferences/IsolatedPreferences.java +++ b/lib/src/test/java/com/team2813/lib2813/preferences/IsolatedPreferences.java @@ -21,6 +21,7 @@ public NetworkTable getPreferencesTable() { protected void before() { NetworkTableInstance.getDefault(); tempInstance = NetworkTableInstance.create(); + tempInstance.startLocal(); Preferences.setNetworkTableInstance(tempInstance); }