Commit: 5cb5256d63ae99ad4e63650b74a9c4ae9c774b5a
Parent: a38f6a23f5f89569a25dcd7d1d625293cc090ae3
Author: Randy Palamar
Date: Wed, 10 Sep 2025 15:25:45 -0600
lib: win32: don't close extra semaphore when parameter blocks decrease
also make sure newly opened semaphores are cleared on failure
Diffstat:
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/helpers/ogl_beamformer_lib.c b/helpers/ogl_beamformer_lib.c
@@ -64,20 +64,27 @@ os_reserve_region_locks(iptr os_context, u32 count)
Stream sb = {.data = buffer, .cap = countof(buffer)};
stream_append_s8(&sb, s8(OS_SHARED_MEMORY_NAME "_lock_"));
- for (u32 i = ctx->reserved_count; i < count; i++) {
+ u32 new_reserved_count;
+ for (new_reserved_count = ctx->reserved_count;
+ new_reserved_count < count && result;
+ new_reserved_count++)
+ {
Stream lb = sb;
- stream_append_u64(&lb, i);
+ stream_append_u64(&lb, new_reserved_count);
stream_append_byte(&lb, 0);
- semaphores[i] = CreateSemaphoreA(0, 1, 1, (c8 *)lb.data);
- result &= semaphores[i] != INVALID_FILE;
+ semaphores[new_reserved_count] = CreateSemaphoreA(0, 1, 1, (c8 *)lb.data);
+ result &= semaphores[new_reserved_count] != INVALID_FILE;
}
if (result) {
ctx->semaphores = semaphores;
ctx->reserved_count = count;
+ } else {
+ for (u32 j = ctx->reserved_count; j < new_reserved_count; j++)
+ CloseHandle(semaphores[j]);
}
} else if (count < ctx->reserved_count) {
- for (u32 i = ctx->reserved_count; i >= count;)
+ for (u32 i = ctx->reserved_count; i > count;)
CloseHandle(semaphores[--i]);
ctx->reserved_count = count;
}