UMOCK_C_LOCK_HANDLE umock_lock_factory_create_lock()

in src/umock_lock_factory_windows.c [99:128]


UMOCK_C_LOCK_HANDLE umock_lock_factory_create_lock(void* params)
{
    (void)params;

    UMOCK_C_LOCK_HANDLE result;
    /* Codes_SRS_UMOCK_LOCK_FACTORY_WINDOWS_01_001: [ umock_lock_factory_create_lock shall allocate memory for the lock. ]*/
    UMOCK_C_LOCK_WINDOWS* srw_lock_windows = umockalloc_malloc(sizeof(UMOCK_C_LOCK_WINDOWS));
    if (srw_lock_windows == NULL)
    {
        /* Codes_SRS_UMOCK_LOCK_FACTORY_WINDOWS_01_004: [ If any error occurs, umock_lock_factory_create_lock shall fail and return NULL. ]*/
        UMOCK_LOG("umockalloc_malloc(%zu) failed", sizeof(UMOCK_C_LOCK_WINDOWS));
        result = NULL;
    }
    else
    {
        /* Codes_SRS_UMOCK_LOCK_FACTORY_WINDOWS_01_003: [ umock_lock_factory_create_lock shall return a lock handle that has the function pointers set to umock_lock_windows_acquire_shared, umock_lock_windows_release_shared, umock_lock_windows_acquire_exclusive, umock_lock_windows_release_exclusive and umock_lock_windows_destroy. ]*/
        srw_lock_windows->lock_if.acquire_shared = umock_lock_windows_acquire_shared;
        srw_lock_windows->lock_if.release_shared = umock_lock_windows_release_shared;
        srw_lock_windows->lock_if.acquire_exclusive = umock_lock_windows_acquire_exclusive;
        srw_lock_windows->lock_if.release_exclusive = umock_lock_windows_release_exclusive;
        srw_lock_windows->lock_if.destroy = umock_lock_windows_destroy;

        /* Codes_SRS_UMOCK_LOCK_FACTORY_WINDOWS_01_002: [ umock_lock_factory_create_lock shall initialize a SRW lock that is encapsulated by the new UMOCK_C_LOCK_HANDLE. ]*/
        InitializeSRWLock(&srw_lock_windows->srw_lock);

        result = &srw_lock_windows->lock_if;
    }

    return result;
}