From ae1bd8f92c945c60d1264575111d7d0a8fa0aa8f Mon Sep 17 00:00:00 2001 From: Adam Heinermann Date: Mon, 1 Sep 2025 00:31:06 -0700 Subject: [PATCH] fix(region): add compile time check to avoid SRgnDuplicate deadlock --- storm/Region.cpp | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/storm/Region.cpp b/storm/Region.cpp index c3a5b25..a76bc89 100644 --- a/storm/Region.cpp +++ b/storm/Region.cpp @@ -471,15 +471,22 @@ void SRgnDuplicate(HSRGN origHandle, HSRGN* handle, uint32_t reserved) { HLOCKEDRGN origlockedhandle; auto rgn = s_rgntable.Lock(origHandle, &origlockedhandle, 0); - if (rgn) { - HLOCKEDRGN newlockedhandle; - auto newrgn = s_rgntable.NewLock(handle, &newlockedhandle); - - *newrgn = *rgn; - - s_rgntable.Unlock(newlockedhandle); - s_rgntable.Unlock(origlockedhandle); + if (!rgn) { + return; } + +#if defined(WHOA_STORM_C_CRIT_SECT_RECURSIVE) + HLOCKEDRGN newlockedhandle; + + auto newrgn = s_rgntable.NewLock(handle, &newlockedhandle); + *newrgn = *rgn; + s_rgntable.Unlock(newlockedhandle); +#else + auto newrgn = s_rgntable.New(handle); + *newrgn = *rgn; +#endif + + s_rgntable.Unlock(origlockedhandle); } void SRgnGetBoundingRectf(HSRGN handle, RECTF* rect) {