From 4a9364082e8f1b2cf022cb372fb4ad5f845ea38d Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Sat, 4 Jul 2026 12:07:06 -0700 Subject: [PATCH] Fix data race lazy-init spin lock deadlock on Windows. PiperOrigin-RevId: 942556300 Change-Id: Iffe7a3e71c0f6273603e2ada14bf8d924b0ee6cf --- src/engine/engine_util_errmem.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/engine/engine_util_errmem.c b/src/engine/engine_util_errmem.c index f6c51988..9eb93992 100644 --- a/src/engine/engine_util_errmem.c +++ b/src/engine/engine_util_errmem.c @@ -21,6 +21,12 @@ #include #include +#if defined(_WIN32) +#include +#elif defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) || defined(__EMSCRIPTEN__) +#include +#endif + #if defined (__unix__) || (defined (__APPLE__) && defined (__MACH__)) #include #endif @@ -152,7 +158,11 @@ static const mjLogConfig* mju_getLogConfigPtr(void) { } else { // another thread is initializing; spin until it completes while (!mj_atomic_load_bool(&env_init_done)) { - // empty +#if defined(_WIN32) + Sleep(0); +#elif defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) || defined(__EMSCRIPTEN__) + sched_yield(); +#endif } } }