From df49c60c9671e4a28e636964d744c1f59fb6cb68 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Mon, 12 Jun 2000 15:00:15 +0000 Subject: Merged from 4.5.0-beta3a --- cpukit/posix/include/Makefile.am | 13 +++++----- cpukit/posix/inline/rtems/posix/cond.inl | 9 ++++--- cpukit/posix/src/Makefile.am | 5 ++-- cpukit/posix/src/mqueuecreatesupp.c | 8 +++--- cpukit/posix/src/mqueuedeletesupp.c | 2 +- cpukit/posix/src/mqueueunlink.c | 2 +- cpukit/posix/src/pthread.c | 4 +-- cpukit/posix/src/pthreadcreate.c | 3 +-- cpukit/posix/src/sigtimedwait.c | 42 +++++++++++++++++++++----------- cpukit/posix/src/waitpid.c | 6 +++-- 10 files changed, 55 insertions(+), 39 deletions(-) (limited to 'cpukit/posix') diff --git a/cpukit/posix/include/Makefile.am b/cpukit/posix/include/Makefile.am index 4abe5df1ee..387e599641 100644 --- a/cpukit/posix/include/Makefile.am +++ b/cpukit/posix/include/Makefile.am @@ -7,22 +7,21 @@ AUTOMAKE_OPTIONS = foreign 1.4 ## RTEMS unistd.h needs to be checked against newlib's and removed UNUSED_H_FILES = devctl.h intr.h unistd.h -H_FILES = pthread.h sched.h aio.h mqueue.h semaphore.h +H_FILES = sched.h aio.h mqueue.h semaphore.h + +# H_FILES = pthread.h sched.h aio.h mqueue.h semaphore.h noinst_HEADERS = $(H_FILES) -PREINSTALL_FILES = \ -$(PROJECT_INCLUDE) \ -$(noinst_HEADERS:%=$(PROJECT_INCLUDE)/%) +PREINSTALL_FILES += $(PROJECT_INCLUDE) \ + $(noinst_HEADERS:%=$(PROJECT_INCLUDE)/%) $(PROJECT_INCLUDE): @$(mkinstalldirs) $@ $(PROJECT_INCLUDE)/%.h: %.h $(INSTALL_DATA) $< $@ -all-am: $(PREINSTALL_FILES) -debug-am: $(PREINSTALL_FILES) -profile-am: $(PREINSTALL_FILES) +all-local: $(PREINSTALL_FILES) SUBDIRS = rtems sys diff --git a/cpukit/posix/inline/rtems/posix/cond.inl b/cpukit/posix/inline/rtems/posix/cond.inl index d718ef514f..19d5c6ec4b 100644 --- a/cpukit/posix/inline/rtems/posix/cond.inl +++ b/cpukit/posix/inline/rtems/posix/cond.inl @@ -53,10 +53,13 @@ RTEMS_INLINE_ROUTINE POSIX_Condition_variables_Control *_POSIX_Condition_variabl Objects_Locations *location ) { -/* XXX really should validate pointer */ /* XXX should support COND_INITIALIZER */ - return (POSIX_Condition_variables_Control *) - _Objects_Get( &_POSIX_Condition_variables_Information, *id, location ); + if ( id ) + return (POSIX_Condition_variables_Control *) + _Objects_Get( &_POSIX_Condition_variables_Information, *id, location ); + + *location = OBJECTS_ERROR; + return NULL; } /*PAGE diff --git a/cpukit/posix/src/Makefile.am b/cpukit/posix/src/Makefile.am index 63fd5adc0f..506d9c53fa 100644 --- a/cpukit/posix/src/Makefile.am +++ b/cpukit/posix/src/Makefile.am @@ -91,12 +91,11 @@ include $(top_srcdir)/../../../../automake/lib.am # AM_CPPFLAGS += -D__RTEMS_INSIDE__ -AM_CFLAGS += $(CFLAGS_OS_V) -all: ${ARCH} ${OBJS} +all-local: ${ARCH} ${OBJS} # temporary so we can see how many things are left to implement -not: +not: grep -i NOT_IMPL $(C_FILES) | grep -v MP_NOT_IMPL @echo @echo diff --git a/cpukit/posix/src/mqueuecreatesupp.c b/cpukit/posix/src/mqueuecreatesupp.c index 148f5b54cb..6b3e5dbe58 100644 --- a/cpukit/posix/src/mqueuecreatesupp.c +++ b/cpukit/posix/src/mqueuecreatesupp.c @@ -74,7 +74,7 @@ int _POSIX_Message_queue_Create_support( attr = *attr_ptr; } -#if defined(RTEMS_MULTIPROCESSING) +#if 0 && defined(RTEMS_MULTIPROCESSING) if ( pshared == PTHREAD_PROCESS_SHARED && !( _Objects_MP_Allocate_and_open( &_POSIX_Message_queue_Information, 0, the_mq->Object.id, FALSE ) ) ) { @@ -112,14 +112,14 @@ int _POSIX_Message_queue_Create_support( the_mq_attr, attr.mq_maxmsg, attr.mq_msgsize, -#if defined(RTEMS_MULTIPROCESSING) +#if 0 && defined(RTEMS_MULTIPROCESSING) _POSIX_Message_queue_MP_Send_extract_proxy #else NULL #endif ) ) { -#if defined(RTEMS_MULTIPROCESSING) +#if 0 && defined(RTEMS_MULTIPROCESSING) if ( pshared == PTHREAD_PROCESS_SHARED ) _Objects_MP_Close( &_POSIX_Message_queue_Information, the_mq->Object.id ); #endif @@ -137,7 +137,7 @@ int _POSIX_Message_queue_Create_support( *message_queue = the_mq; -#if defined(RTEMS_MULTIPROCESSING) +#if 0 && defined(RTEMS_MULTIPROCESSING) if ( pshared == PTHREAD_PROCESS_SHARED ) _POSIX_Message_queue_MP_Send_process_packet( POSIX_MESSAGE_QUEUE_MP_ANNOUNCE_CREATE, diff --git a/cpukit/posix/src/mqueuedeletesupp.c b/cpukit/posix/src/mqueuedeletesupp.c index ec717aedad..f8076d601a 100644 --- a/cpukit/posix/src/mqueuedeletesupp.c +++ b/cpukit/posix/src/mqueuedeletesupp.c @@ -48,7 +48,7 @@ void _POSIX_Message_queue_Delete( _POSIX_Message_queue_Free( the_mq ); -#if defined(RTEMS_MULTIPROCESSING) +#if 0 && defined(RTEMS_MULTIPROCESSING) if ( the_mq->process_shared == PTHREAD_PROCESS_SHARED ) { _Objects_MP_Close( diff --git a/cpukit/posix/src/mqueueunlink.c b/cpukit/posix/src/mqueueunlink.c index 4c219eecea..26399386a7 100644 --- a/cpukit/posix/src/mqueueunlink.c +++ b/cpukit/posix/src/mqueueunlink.c @@ -63,7 +63,7 @@ int mq_unlink( _Objects_Get_index( the_mq_id ) ); -#if defined(RTEMS_MULTIPROCESSING) +#if 0 && defined(RTEMS_MULTIPROCESSING) if ( the_mq->process_shared == PTHREAD_PROCESS_SHARED ) { _Objects_MP_Close( &_POSIX_Message_queue_Information, the_mq_id ); } diff --git a/cpukit/posix/src/pthread.c b/cpukit/posix/src/pthread.c index 49f6273a71..46a41a1da5 100644 --- a/cpukit/posix/src/pthread.c +++ b/cpukit/posix/src/pthread.c @@ -356,8 +356,8 @@ void _POSIX_Threads_Manager_initialization( FALSE, /* does not support global */ maximum_pthreads, sizeof( Thread_Control ), - TRUE, - 5, /* length is arbitrary for now */ + FALSE, + 0, /* length is arbitrary for now */ TRUE /* this class is threads */ ); diff --git a/cpukit/posix/src/pthreadcreate.c b/cpukit/posix/src/pthreadcreate.c index b4e4788f2e..c936e6ec65 100644 --- a/cpukit/posix/src/pthreadcreate.c +++ b/cpukit/posix/src/pthreadcreate.c @@ -34,7 +34,6 @@ int pthread_create( boolean is_fp; boolean status; Thread_Control *the_thread; - char *default_name = "psx"; POSIX_API_Control *api; int schedpolicy = SCHED_RR; struct sched_param schedparam; @@ -177,7 +176,7 @@ int pthread_create( budget_algorithm, budget_callout, 0, /* isr level */ - &default_name /* posix threads don't have a name */ + NULL /* posix threads don't have a name */ ); if ( !status ) { diff --git a/cpukit/posix/src/sigtimedwait.c b/cpukit/posix/src/sigtimedwait.c index b3b2de247d..276b9b61af 100644 --- a/cpukit/posix/src/sigtimedwait.c +++ b/cpukit/posix/src/sigtimedwait.c @@ -21,6 +21,7 @@ #include #include #include +#include int _POSIX_signals_Get_highest( sigset_t set @@ -55,7 +56,27 @@ int sigtimedwait( siginfo_t signal_information; siginfo_t *the_info; int signo; + ISR_Level level; + /* + * Error check parameters before disabling interrupts. + */ + + interval = 0; + if ( timeout ) { + + if ( timeout->tv_nsec < 0 || + timeout->tv_nsec >= TOD_NANOSECONDS_PER_SECOND) { + set_errno_and_return_minus_one( EINVAL ); + } + + interval = _POSIX_Timespec_to_interval( timeout ); + } + + /* + * Initialize local variables. + */ + the_info = ( info ) ? info : &signal_information; the_thread = _Thread_Executing; @@ -68,11 +89,13 @@ int sigtimedwait( /* API signals pending? */ + _ISR_Disable( level ); if ( *set & api->signals_pending ) { /* XXX real info later */ the_info->si_signo = _POSIX_signals_Get_highest( api->signals_pending ); - _POSIX_signals_Clear_signals( api, the_info->si_signo, the_info, - FALSE, FALSE ); + _POSIX_signals_Clear_signals( api, the_info->si_signo, the_info, FALSE, FALSE ); + _ISR_Enable( level ); + the_info->si_code = SI_USER; the_info->si_value.sival_int = 0; return the_info->si_signo; @@ -83,6 +106,7 @@ int sigtimedwait( if ( *set & _POSIX_signals_Pending ) { signo = _POSIX_signals_Get_highest( _POSIX_signals_Pending ); _POSIX_signals_Clear_signals( api, signo, the_info, TRUE, FALSE ); + _ISR_Enable( level ); the_info->si_signo = signo; the_info->si_code = SI_USER; @@ -90,15 +114,6 @@ int sigtimedwait( return signo; } - interval = 0; - if ( timeout ) { - - if (timeout->tv_nsec < 0 || timeout->tv_nsec >= TOD_NANOSECONDS_PER_SECOND) - set_errno_and_return_minus_one( EINVAL ); - - interval = _POSIX_Timespec_to_interval( timeout ); - } - the_info->si_signo = -1; _Thread_Disable_dispatch(); @@ -107,6 +122,7 @@ int sigtimedwait( the_thread->Wait.option = *set; the_thread->Wait.return_argument = (void *) the_info; _Thread_queue_Enter_critical_section( &_POSIX_signals_Wait_queue ); + _ISR_Enable( level ); _Thread_queue_Enqueue( &_POSIX_signals_Wait_queue, interval ); _Thread_Enable_dispatch(); @@ -115,9 +131,7 @@ int sigtimedwait( * the signal. */ - _POSIX_signals_Clear_signals( api, the_info->si_signo, the_info, - FALSE, FALSE ); - + _POSIX_signals_Clear_signals( api, the_info->si_signo, the_info, FALSE, FALSE ); errno = _Thread_Executing->Wait.return_code; return the_info->si_signo; } diff --git a/cpukit/posix/src/waitpid.c b/cpukit/posix/src/waitpid.c index f20161b5a9..d52177961d 100644 --- a/cpukit/posix/src/waitpid.c +++ b/cpukit/posix/src/waitpid.c @@ -8,8 +8,10 @@ #include #include -int wait( - int *stat_loc +int waitpid( + pid_t pid, + int *stat_loc, + int options ) { errno = ENOSYS; -- cgit v1.2.3