mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-25 13:57:15 +00:00
Added rtems_semaphore_flush directive.
This commit is contained in:
@@ -161,6 +161,17 @@ rtems_status_code rtems_semaphore_release(
|
||||
rtems_id id
|
||||
);
|
||||
|
||||
/*
|
||||
* rtems_semaphore_flush
|
||||
*
|
||||
* This directive allows a thread to flush the threads
|
||||
* pending on the semaphore.
|
||||
*/
|
||||
|
||||
rtems_status_code rtems_semaphore_flush(
|
||||
Objects_Id id
|
||||
);
|
||||
|
||||
/*
|
||||
* _Semaphore_Seize
|
||||
*
|
||||
|
||||
@@ -41,7 +41,7 @@ MESSAGE_QUEUE_C_PIECES = msg msgqallocate msgqbroadcast msgqcreate \
|
||||
msgqsubmit msgqtranslatereturncode msgqurgent
|
||||
|
||||
SEMAPHORE_C_PIECES = sem semcreate semdelete semident semobtain semrelease \
|
||||
semtranslatereturncode
|
||||
semflush semtranslatereturncode
|
||||
|
||||
EVENT_C_PIECES = event eventreceive eventseize eventsend eventsurrender \
|
||||
eventtimeout
|
||||
|
||||
93
c/src/exec/rtems/src/semflush.c
Normal file
93
c/src/exec/rtems/src/semflush.c
Normal file
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
* rtems_semaphore_flush
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* This package is the implementation of the flush directive
|
||||
* of the Semaphore Manager.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1998.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
* Copyright assigned to U.S. Government, 1994.
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <rtems/system.h>
|
||||
#include <rtems/rtems/status.h>
|
||||
#include <rtems/rtems/support.h>
|
||||
#include <rtems/rtems/attr.h>
|
||||
#include <rtems/score/isr.h>
|
||||
#include <rtems/score/object.h>
|
||||
#include <rtems/rtems/options.h>
|
||||
#include <rtems/rtems/sem.h>
|
||||
#include <rtems/score/coremutex.h>
|
||||
#include <rtems/score/coresem.h>
|
||||
#include <rtems/score/states.h>
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/score/threadq.h>
|
||||
#if defined(RTEMS_MULTIPROCESSING)
|
||||
#include <rtems/score/mpci.h>
|
||||
#endif
|
||||
#include <rtems/score/sysstate.h>
|
||||
|
||||
#include <rtems/score/interr.h>
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* rtems_semaphore_flush
|
||||
*
|
||||
* This directive allows a thread to flush the threads
|
||||
* pending on the semaphore.
|
||||
*
|
||||
* Input parameters:
|
||||
* id - semaphore id
|
||||
*
|
||||
* Output parameters:
|
||||
* RTEMS_SUCCESSFUL - if successful
|
||||
* error code - if unsuccessful
|
||||
*/
|
||||
|
||||
rtems_status_code rtems_semaphore_flush(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
register Semaphore_Control *the_semaphore;
|
||||
Objects_Locations location;
|
||||
boolean wait;
|
||||
|
||||
the_semaphore = _Semaphore_Get( id, &location );
|
||||
switch ( location ) {
|
||||
|
||||
case OBJECTS_REMOTE:
|
||||
#if defined(RTEMS_MULTIPROCESSING)
|
||||
_Thread_Dispatch();
|
||||
return RTEMS_ILLEGAL_ON_REMOTE_OBJECT;
|
||||
#endif
|
||||
|
||||
case OBJECTS_ERROR:
|
||||
return RTEMS_INVALID_ID;
|
||||
|
||||
case OBJECTS_LOCAL:
|
||||
if ( _Attributes_Is_binary_semaphore(the_semaphore->attribute_set) ) {
|
||||
_CORE_mutex_Flush(
|
||||
&the_semaphore->Core_control.mutex,
|
||||
NULL,
|
||||
CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT
|
||||
);
|
||||
} else {
|
||||
_CORE_semaphore_Flush(
|
||||
&the_semaphore->Core_control.semaphore,
|
||||
NULL,
|
||||
CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT
|
||||
);
|
||||
}
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */
|
||||
}
|
||||
Reference in New Issue
Block a user