Adds HAL_Initialize to ErrorBase constructor, and makes HAL_Initialize properly reentrant (#668)

Partial fix to #663, and most likely the best we are going to be able to
get.
This commit is contained in:
Thad House
2017-10-16 20:00:32 -07:00
committed by Peter Johnson
parent ee20747255
commit 434d60592c
4 changed files with 26 additions and 1 deletions

View File

@@ -194,8 +194,19 @@ HAL_Bool HAL_GetBrownedOut(int32_t* status) {
}
HAL_Bool HAL_Initialize(int32_t timeout, int32_t mode) {
static std::atomic_bool initialized{false};
static std::mutex initializeMutex;
// Initial check, as if it's true initialization has finished
if (initialized) return true;
std::lock_guard<std::mutex> lock(initializeMutex);
// Second check in case another thread was waiting
if (initialized) return true;
hal::RestartTiming();
HAL_InitializeDriverStation();
initialized = true;
return true; // Add initialization if we need to at a later point
}