diff --git a/hal/src/main/native/sim/Extensions.cpp b/hal/src/main/native/sim/Extensions.cpp index 38d0b2996c..6675a51756 100644 --- a/hal/src/main/native/sim/Extensions.cpp +++ b/hal/src/main/native/sim/Extensions.cpp @@ -12,7 +12,9 @@ #include #include #include +#include #include +#include #include "hal/HAL.h" @@ -39,6 +41,7 @@ #define DLERROR dlerror() #endif +static wpi::recursive_spinlock gExtensionRegistryMutex; static std::vector> gExtensionRegistry; static std::vector> gExtensionListeners; @@ -123,6 +126,7 @@ int HAL_LoadExtensions(void) { } void HAL_RegisterExtension(const char* name, void* data) { + std::scoped_lock lock(gExtensionRegistryMutex); gExtensionRegistry.emplace_back(name, data); for (auto&& listener : gExtensionListeners) listener.second(listener.first, name, data); @@ -131,6 +135,7 @@ void HAL_RegisterExtension(const char* name, void* data) { void HAL_RegisterExtensionListener(void* param, void (*func)(void*, const char* name, void* data)) { + std::scoped_lock lock(gExtensionRegistryMutex); gExtensionListeners.emplace_back(param, func); for (auto&& extension : gExtensionRegistry) func(param, extension.first, extension.second);