in src/clds_hash_table.c [61:77]
static void check_lock_and_begin_write_operation(CLDS_HASH_TABLE_HANDLE clds_hash_table)
{
int32_t locked_for_write;
do
{
(void)interlocked_increment(&clds_hash_table->pending_write_operations);
locked_for_write = interlocked_add(&clds_hash_table->locked_for_write, 0);
if (locked_for_write != 0)
{
(void)interlocked_decrement(&clds_hash_table->pending_write_operations);
wake_by_address_all(&clds_hash_table->pending_write_operations);
// Wait for unlock
(void)wait_on_address(&clds_hash_table->locked_for_write, locked_for_write, UINT32_MAX);
}
} while (locked_for_write != 0);
}