diff --git a/hal/src/main/native/sim/DriverStation.cpp b/hal/src/main/native/sim/DriverStation.cpp index e8f56967f9..f945b3068c 100644 --- a/hal/src/main/native/sim/DriverStation.cpp +++ b/hal/src/main/native/sim/DriverStation.cpp @@ -27,6 +27,7 @@ static wpi::mutex msgMutex; static wpi::condition_variable* newDSDataAvailableCond; static wpi::mutex newDSDataAvailableMutex; static int newDSDataAvailableCounter{0}; +static std::atomic_bool isFinalized{false}; namespace hal { namespace init { @@ -234,6 +235,9 @@ HAL_Bool HAL_IsNewControlData(void) { void HAL_WaitForDSData(void) { HAL_WaitForDSDataTimeout(0); } HAL_Bool HAL_WaitForDSDataTimeout(double timeout) { + if (isFinalized.load()) { + return false; + } auto timeoutTime = std::chrono::steady_clock::now() + std::chrono::duration(timeout); @@ -279,6 +283,11 @@ void HAL_InitializeDriverStation(void) { SimDriverStationData->ResetData(); + std::atexit([]() { + isFinalized.store(true); + HAL_ReleaseDSMutex(); + }); + initialized = true; }