in src/umock_lock_factory_pthread.c [112:152]
UMOCK_C_LOCK_HANDLE umock_lock_factory_create_lock(void* params)
{
(void)params;
UMOCK_C_LOCK_HANDLE result;
/* Codes_SRS_UMOCK_LOCK_FACTORY_PTHREAD_01_001: [ umock_lock_factory_create_lock shall allocate memory for the lock. ]*/
UMOCK_C_LOCK_PTHREAD* rw_lock_pthreads = umockalloc_malloc(sizeof(UMOCK_C_LOCK_PTHREAD));
if (rw_lock_pthreads == NULL)
{
/* Codes_SRS_UMOCK_LOCK_FACTORY_PTHREAD_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_PTHREAD));
}
else
{
/* Codes_SRS_UMOCK_LOCK_FACTORY_PTHREAD_01_003: [ umock_lock_factory_create_lock shall return a lock handle that has the function pointers set to umock_lock_pthread_acquire_shared, umock_lock_pthread_release_shared, umock_lock_pthread_acquire_exclusive, umock_lock_pthread_release_exclusive and umock_lock_pthread_destroy. ]*/
rw_lock_pthreads->lock_if.acquire_shared = umock_lock_pthreads_acquire_shared;
rw_lock_pthreads->lock_if.release_shared = umock_lock_pthreads_release_shared;
rw_lock_pthreads->lock_if.acquire_exclusive = umock_lock_pthreads_acquire_exclusive;
rw_lock_pthreads->lock_if.release_exclusive = umock_lock_pthreads_release_exclusive;
rw_lock_pthreads->lock_if.destroy = umock_lock_pthreads_destroy;
/* Codes_SRS_UMOCK_LOCK_FACTORY_PTHREAD_01_002: [] umock_lock_factory_create_lock shall initialize a pthread RW lock that is encapsulated by the new UMOCK_C_LOCK_HANDLE. ]*/
if (pthread_rwlock_init(&rw_lock_pthreads->rw_lock, NULL) != 0)
{
/* Codes_SRS_UMOCK_LOCK_FACTORY_PTHREAD_01_004: [ If any error occurs, umock_lock_factory_create_lock shall fail and return NULL. ]*/
UMOCK_LOG("pthread_rwlock_init failed");
}
else
{
result = &rw_lock_pthreads->lock_if;
goto all_ok;
}
umockalloc_free(rw_lock_pthreads);
}
result = NULL;
all_ok:
return result;
}