ogl_beamforming

Ultrasound Beamforming Implemented with OpenGL
git clone anongit@rnpnr.xyz:ogl_beamforming.git
Log | Files | Refs | Feed | Submodules | README | LICENSE

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:
Mhelpers/ogl_beamformer_lib.c | 17++++++++++++-----
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; }