static void check_lock_and_begin_write_operation()

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);
}