forked from Imagelibrary/rtems
Rename _POSIX_Absolute_timeout_to_ticks() to _TOD_Absolute_timeout_to_ticks() and move it to the score directory. Delete empty <rtems/posix/time.h>.
80 lines
1.6 KiB
C
80 lines
1.6 KiB
C
/**
|
|
* @file
|
|
*
|
|
* @brief POSIX Semaphore Wait Support
|
|
* @ingroup POSIXSemaphorePrivate
|
|
*/
|
|
|
|
/*
|
|
* COPYRIGHT (c) 1989-2012.
|
|
* 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 <stdarg.h>
|
|
|
|
#include <errno.h>
|
|
#include <fcntl.h>
|
|
#include <pthread.h>
|
|
#include <semaphore.h>
|
|
#include <limits.h>
|
|
|
|
#include <rtems/system.h>
|
|
#include <rtems/posix/semaphoreimpl.h>
|
|
#include <rtems/seterr.h>
|
|
|
|
int _POSIX_Semaphore_Wait_support(
|
|
sem_t *sem,
|
|
bool blocking,
|
|
Watchdog_Interval timeout
|
|
)
|
|
{
|
|
POSIX_Semaphore_Control *the_semaphore;
|
|
Objects_Locations location;
|
|
Thread_Control *executing;
|
|
ISR_lock_Context lock_context;
|
|
|
|
the_semaphore = _POSIX_Semaphore_Get_interrupt_disable(
|
|
sem,
|
|
&location,
|
|
&lock_context
|
|
);
|
|
switch ( location ) {
|
|
|
|
case OBJECTS_LOCAL:
|
|
executing = _Thread_Executing;
|
|
_CORE_semaphore_Seize(
|
|
&the_semaphore->Semaphore,
|
|
executing,
|
|
the_semaphore->Object.id,
|
|
blocking,
|
|
timeout,
|
|
&lock_context
|
|
);
|
|
|
|
if ( !executing->Wait.return_code )
|
|
return 0;
|
|
|
|
rtems_set_errno_and_return_minus_one(
|
|
_POSIX_Semaphore_Translate_core_semaphore_return_code(
|
|
executing->Wait.return_code
|
|
)
|
|
);
|
|
|
|
#if defined(RTEMS_MULTIPROCESSING)
|
|
case OBJECTS_REMOTE:
|
|
#endif
|
|
case OBJECTS_ERROR:
|
|
break;
|
|
}
|
|
|
|
rtems_set_errno_and_return_minus_one( EINVAL );
|
|
}
|