FAR struct join_s *pthread_findjoininfo(FAR struct task_group_s *group, pid_t pid);
void pthread_release(FAR struct task_group_s *group);
int pthread_takesemaphore(sem_t *sem, bool intr);
+#ifdef CONFIG_PTHREAD_MUTEX_UNSAFE
+int pthread_sem_trytake(sem_t *sem);
+#endif
int pthread_givesemaphore(sem_t *sem);
#ifndef CONFIG_PTHREAD_MUTEX_UNSAFE
void pthread_mutex_inconsistent(FAR struct pthread_tcb_s *tcb);
#else
#define pthread_mutex_take(m,i) pthread_takesemaphore(&(m)->sem,(i))
-#define pthread_mutex_trytake(m) sem_trywait(&(m)->sem)
+#define pthread_mutex_trytake(m) pthread_sem_trytake(&(m)->sem)
#define pthread_mutex_give(m) pthread_givesemaphore(&(m)->sem)
#endif
}
}
+#ifdef CONFIG_PTHREAD_MUTEX_UNSAFE
+int pthread_sem_trytake(sem_t *sem)
+{
+ int ret = EINVAL;
+
+ /* Verify input parameters */
+
+ DEBUGASSERT(sem != NULL);
+ if (sem != NULL) {
+ /* Try to take the semaphore */
+
+ int status = sem_trywait(sem);
+ ret = status < 0 ? get_errno() : OK;
+ }
+
+ return ret;
+}
+#endif
+
int pthread_givesemaphore(sem_t *sem)
{
/* Verify input parameters */