fix(region): add compile time check to avoid SRgnDuplicate deadlock

This commit is contained in:
Adam Heinermann 2025-09-01 00:31:06 -07:00 committed by fallenoak
parent 6c4f7e9d66
commit ae1bd8f92c

View file

@ -471,15 +471,22 @@ void SRgnDuplicate(HSRGN origHandle, HSRGN* handle, uint32_t reserved) {
HLOCKEDRGN origlockedhandle; HLOCKEDRGN origlockedhandle;
auto rgn = s_rgntable.Lock(origHandle, &origlockedhandle, 0); auto rgn = s_rgntable.Lock(origHandle, &origlockedhandle, 0);
if (rgn) { if (!rgn) {
HLOCKEDRGN newlockedhandle; return;
auto newrgn = s_rgntable.NewLock(handle, &newlockedhandle);
*newrgn = *rgn;
s_rgntable.Unlock(newlockedhandle);
s_rgntable.Unlock(origlockedhandle);
} }
#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) { void SRgnGetBoundingRectf(HSRGN handle, RECTF* rect) {