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) {