/** * @file * * @brief Implements wake up version of the "signal" operation * @ingroup POSIX_COND_VARS Condition Variables */ /* * COPYRIGHT (c) 1989-2014. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.org/license/LICENSE. */ #if HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include /* * _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, bool is_broadcast ) { 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_LOCAL: do { the_thread = _Thread_queue_Dequeue( &the_cond->Wait_queue, POSIX_CONDITION_VARIABLES_TQ_OPERATIONS, NULL, 0 ); if ( !the_thread ) the_cond->Mutex = POSIX_CONDITION_VARIABLES_NO_MUTEX; } while ( is_broadcast && the_thread ); _Objects_Put( &the_cond->Object ); return 0; #if defined(RTEMS_MULTIPROCESSING) case OBJECTS_REMOTE: #endif case OBJECTS_ERROR: break; } return EINVAL; }