ClRcT cosPosixSemTryLock (ClOsalSemIdT semId) { ClInt32T retCode = CL_OK; sem_t *pSem = *(sem_t**)&semId; CL_FUNC_ENTER(); retCode = sem_trywait(pSem); if (-1 == retCode) { int err = errno; if (err == EAGAIN) return(CL_OSAL_RC(CL_OSAL_ERR_SEM_LOCK)); /* Taking the lock failed because the lock is taken by someone else */ else sysRetErrChkRet(err); /* Some unexpected error occurred */ } CL_FUNC_EXIT(); return (CL_OK); /* It worked, lock was taken */ }
ClRcT cosSysvSemTryLock (ClOsalSemIdT semId) { ClInt32T retCode = CL_OK; struct sembuf semLock[] = {{0, -1, SEM_UNDO | IPC_NOWAIT}}; CL_FUNC_ENTER(); retCode = semop ((int)semId, semLock, 1); if (-1 == retCode) { int err = errno; if (err == EAGAIN) return(CL_OSAL_RC(CL_OSAL_ERR_SEM_LOCK)); /* Taking the lock failed because the lock is taken by someone else */ else { sysRetErrChkRet(err); /* Some unexpected error occurred */ } } CL_FUNC_EXIT(); return (CL_OK); /* It worked, lock was taken */ }