From 98dca75bf3c7cd6692349b6a9e4f66430d90e779 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 2 Nov 1999 18:25:26 +0000 Subject: Split condition variables into multiple files. --- cpukit/posix/src/condsignalsupp.c | 57 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 cpukit/posix/src/condsignalsupp.c (limited to 'cpukit/posix/src/condsignalsupp.c') diff --git a/cpukit/posix/src/condsignalsupp.c b/cpukit/posix/src/condsignalsupp.c new file mode 100644 index 0000000000..e6b4d6a1a3 --- /dev/null +++ b/cpukit/posix/src/condsignalsupp.c @@ -0,0 +1,57 @@ +/* + * $Id$ + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +/*PAGE + * + * _POSIX_Condition_variables_Signal_support + * + * A support routine which implements guts of the broadcast and single task + * wake up version of the "signal" operation. + */ + +int _POSIX_Condition_variables_Signal_support( + pthread_cond_t *cond, + boolean is_broadcast +) +{ + register POSIX_Condition_variables_Control *the_cond; + Objects_Locations location; + Thread_Control *the_thread; + + the_cond = _POSIX_Condition_variables_Get( cond, &location ); + switch ( location ) { + case OBJECTS_REMOTE: +#if defined(RTEMS_MULTIPROCESSING) + _Thread_Dispatch(); + return POSIX_MP_NOT_IMPLEMENTED(); + return EINVAL; +#endif + + case OBJECTS_ERROR: + return EINVAL; + case OBJECTS_LOCAL: + + do { + the_thread = _Thread_queue_Dequeue( &the_cond->Wait_queue ); + if ( !the_thread ) + the_cond->Mutex = POSIX_CONDITION_VARIABLES_NO_MUTEX; + } while ( is_broadcast && the_thread ); + + _Thread_Enable_dispatch(); + + return 0; + } + return POSIX_BOTTOM_REACHED(); +} -- cgit v1.2.3