lock
September 19, 2017 ยท View on GitHub
Overview
The lock adapter implements synchronization needed with the threadapi adapter.
A functional Lock adapter implementation is only required if the optional threadapi adapter is being used.
Exposed API
SRS_LOCK_10_001: [ Lock interface exposes the following APIs ]
typedef enum LOCK_RESULT_TAG
{
LOCK_OK,
LOCK_ERROR
} LOCK_RESULT;
typedef void* HANDLE_LOCK;
SRS_LOCK_10_015: [ This is the handle to the different lock instances ]
HANDLE_LOCK Lock_Init (void);
SRS_LOCK_30_001: [ If the lock adapter is not implemented, Lock_Init shall return NULL. ]
SRS_LOCK_10_002: [ Lock_Init on success shall return a valid lock handle which should be a non-NULL value ]
SRS_LOCK_10_003: [ Lock_Init on error shall return NULL ]
LOCK_RESULT Lock(HANDLE_LOCK handle);
SRS_LOCK_30_001: [ If the lock adapter is not implemented, Lock shall return LOCK_ERROR. ]
SRS_LOCK_10_004: [ Lock shall be implemented as a non-recursive lock ]
SRS_LOCK_10_005: [ Lock on success shall return LOCK_OK ]
SRS_LOCK_10_006: [ Lock on error shall return LOCK_ERROR ]
SRS_LOCK_10_007: [ Lock on NULL handle passed returns LOCK_ERROR ]
LOCK_RESULT Unlock(HANDLE_LOCK handle);
SRS_LOCK_30_001: [ If the lock adapter is not implemented, Unlock shall return LOCK_ERROR. ]
SRS_LOCK_10_008: [ Unlock shall be implemented as a mutex unlock ]
SRS_LOCK_10_009: [ Unlock on success shall return LOCK_OK ]
SRS_LOCK_10_010: [ Unlock on error shall return LOCK_ERROR ]
SRS_LOCK_10_011: [ Unlock on NULL handle passed returns LOCK_ERROR ]
LOCK_RESULT Lock_Deinit(HANDLE_LOCK handle);
SRS_LOCK_30_001: [ If the lock adapter is not implemented, Lock_Deinit shall do nothing. ]
SRS_LOCK_10_012: [ Lock_Deinit frees all resources associated with handle ]
SRS_LOCK_10_013: [ Lock_Deinit on NULL handle passed returns LOCK_ERROR ]