summaryrefslogtreecommitdiffstats
path: root/cpukit/posix/src/semaphorewaitsupp.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/posix/src/semaphorewaitsupp.c')
-rw-r--r--cpukit/posix/src/semaphorewaitsupp.c44
1 files changed, 18 insertions, 26 deletions
diff --git a/cpukit/posix/src/semaphorewaitsupp.c b/cpukit/posix/src/semaphorewaitsupp.c
index 7085cbe136..e35ae7693b 100644
--- a/cpukit/posix/src/semaphorewaitsupp.c
+++ b/cpukit/posix/src/semaphorewaitsupp.c
@@ -36,11 +36,7 @@ int _POSIX_Semaphore_Wait_support(
the_semaphore = _POSIX_Semaphore_Get( sem, &location );
switch ( location ) {
-#if defined(RTEMS_MULTIPROCESSING)
- case OBJECTS_REMOTE:
-#endif
- case OBJECTS_ERROR:
- rtems_set_errno_and_return_minus_one( EINVAL );
+
case OBJECTS_LOCAL:
_CORE_semaphore_Seize(
&the_semaphore->Semaphore,
@@ -49,26 +45,22 @@ int _POSIX_Semaphore_Wait_support(
timeout
);
_Thread_Enable_dispatch();
- switch ( _Thread_Executing->Wait.return_code ) {
- case CORE_SEMAPHORE_STATUS_SUCCESSFUL:
- break;
- case CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT:
- rtems_set_errno_and_return_minus_one( EAGAIN );
- case CORE_SEMAPHORE_WAS_DELETED:
- rtems_set_errno_and_return_minus_one( EAGAIN );
- case CORE_SEMAPHORE_TIMEOUT:
- rtems_set_errno_and_return_minus_one( ETIMEDOUT );
- break;
- case CORE_SEMAPHORE_MAXIMUM_COUNT_EXCEEDED:
- /*
- * This error can not occur since we set the maximum
- * count to the largest value the count can hold.
- */
- break;
- case CORE_SEMAPHORE_BAD_TIMEOUT_VALUE:
- rtems_set_errno_and_return_minus_one( EINVAL );
- break;
- }
+
+ if ( !_Thread_Executing->Wait.return_code )
+ return 0;
+
+ rtems_set_errno_and_return_minus_one(
+ _POSIX_Semaphore_Translate_core_semaphore_return_code(
+ _Thread_Executing->Wait.return_code
+ )
+ );
+
+#if defined(RTEMS_MULTIPROCESSING)
+ case OBJECTS_REMOTE:
+#endif
+ case OBJECTS_ERROR:
+ break;
}
- return 0;
+
+ rtems_set_errno_and_return_minus_one( EINVAL );
}