summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-05-27 09:41:18 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-05-30 16:16:22 +0200
commit3c1ad25768e2ecade380ee1a211b93fa4cb3ea22 (patch)
treed24376829e0587b908dce53875c69a6c7be199b2
parent8a77ef63de3caaa9742b8b0faccd0258b98fa680 (diff)
rtems: Simplify rtems_semaphore_delete()
Due to the unified status codes, we can now use a common flush and destroy method for semaphore and mutex variants.
-rw-r--r--cpukit/rtems/src/semdelete.c17
-rw-r--r--cpukit/score/include/rtems/score/coremuteximpl.h14
-rw-r--r--cpukit/score/include/rtems/score/coresemimpl.h14
3 files changed, 6 insertions, 39 deletions
diff --git a/cpukit/rtems/src/semdelete.c b/cpukit/rtems/src/semdelete.c
index 908c178593..34da496b8d 100644
--- a/cpukit/rtems/src/semdelete.c
+++ b/cpukit/rtems/src/semdelete.c
@@ -84,14 +84,6 @@ rtems_status_code rtems_semaphore_delete(
_Objects_Close( &_Semaphore_Information, &the_semaphore->Object );
switch ( the_semaphore->variant ) {
- case SEMAPHORE_VARIANT_MUTEX:
- _CORE_mutex_Flush(
- &the_semaphore->Core_control.mutex,
- _Thread_queue_Flush_status_object_was_deleted,
- &queue_context
- );
- _CORE_mutex_Destroy( &the_semaphore->Core_control.mutex );
- break;
#if defined(RTEMS_SMP)
case SEMAPHORE_VARIANT_MRSP:
_MRSP_Destroy( &the_semaphore->Core_control.mrsp, &queue_context );
@@ -99,14 +91,17 @@ rtems_status_code rtems_semaphore_delete(
#endif
default:
_Assert(
- the_semaphore->variant == SEMAPHORE_VARIANT_SIMPLE_BINARY
+ the_semaphore->variant == SEMAPHORE_VARIANT_MUTEX
+ || the_semaphore->variant == SEMAPHORE_VARIANT_SIMPLE_BINARY
|| the_semaphore->variant == SEMAPHORE_VARIANT_COUNTING
);
- _CORE_semaphore_Destroy(
- &the_semaphore->Core_control.semaphore,
+ _Thread_queue_Flush_critical(
+ &the_semaphore->Core_control.Wait_queue.Queue,
_Semaphore_Get_operations( the_semaphore ),
+ _Thread_queue_Flush_status_object_was_deleted,
&queue_context
);
+ _Thread_queue_Destroy( &the_semaphore->Core_control.Wait_queue );
break;
}
diff --git a/cpukit/score/include/rtems/score/coremuteximpl.h b/cpukit/score/include/rtems/score/coremuteximpl.h
index ccc414827d..f8869b0a42 100644
--- a/cpukit/score/include/rtems/score/coremuteximpl.h
+++ b/cpukit/score/include/rtems/score/coremuteximpl.h
@@ -314,20 +314,6 @@ Status_Control _CORE_mutex_Surrender(
Thread_queue_Context *queue_context
);
-RTEMS_INLINE_ROUTINE void _CORE_mutex_Flush(
- CORE_mutex_Control *the_mutex,
- Thread_queue_Flush_filter filter,
- Thread_queue_Context *queue_context
-)
-{
- _Thread_queue_Flush_critical(
- &the_mutex->Wait_queue.Queue,
- the_mutex->operations,
- filter,
- queue_context
- );
-}
-
RTEMS_INLINE_ROUTINE bool _CORE_mutex_Is_owner(
const CORE_mutex_Control *the_mutex,
const Thread_Control *the_thread
diff --git a/cpukit/score/include/rtems/score/coresemimpl.h b/cpukit/score/include/rtems/score/coresemimpl.h
index 24d8c5114d..487a91b3c7 100644
--- a/cpukit/score/include/rtems/score/coresemimpl.h
+++ b/cpukit/score/include/rtems/score/coresemimpl.h
@@ -141,20 +141,6 @@ RTEMS_INLINE_ROUTINE Status_Control _CORE_semaphore_Surrender(
return status;
}
-RTEMS_INLINE_ROUTINE void _CORE_semaphore_Flush(
- CORE_semaphore_Control *the_semaphore,
- const Thread_queue_Operations *operations,
- Thread_queue_Context *queue_context
-)
-{
- _Thread_queue_Flush_critical(
- &the_semaphore->Wait_queue.Queue,
- operations,
- _Thread_queue_Flush_status_unavailable,
- queue_context
- );
-}
-
/**
* This routine returns the current count associated with the semaphore.
*