summaryrefslogtreecommitdiffstats
path: root/cpukit/posix
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2000-06-12 15:00:15 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2000-06-12 15:00:15 +0000
commitdf49c60c9671e4a28e636964d744c1f59fb6cb68 (patch)
treeeabd85e189514ad412a35414ba5d483dcda3ef1f /cpukit/posix
parent0ab65474316231792faec37ec1dbddeaf8645775 (diff)
downloadrtems-df49c60c9671e4a28e636964d744c1f59fb6cb68.tar.bz2
Merged from 4.5.0-beta3a
Diffstat (limited to 'cpukit/posix')
-rw-r--r--cpukit/posix/include/Makefile.am13
-rw-r--r--cpukit/posix/inline/rtems/posix/cond.inl9
-rw-r--r--cpukit/posix/src/Makefile.am5
-rw-r--r--cpukit/posix/src/mqueuecreatesupp.c8
-rw-r--r--cpukit/posix/src/mqueuedeletesupp.c2
-rw-r--r--cpukit/posix/src/mqueueunlink.c2
-rw-r--r--cpukit/posix/src/pthread.c4
-rw-r--r--cpukit/posix/src/pthreadcreate.c3
-rw-r--r--cpukit/posix/src/sigtimedwait.c42
-rw-r--r--cpukit/posix/src/waitpid.c6
10 files changed, 55 insertions, 39 deletions
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 <rtems/posix/psignal.h>
#include <rtems/posix/seterr.h>
#include <rtems/posix/time.h>
+#include <rtems/score/isr.h>
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 <sys/wait.h>
#include <errno.h>
-int wait(
- int *stat_loc
+int waitpid(
+ pid_t pid,
+ int *stat_loc,
+ int options
)
{
errno = ENOSYS;