change log for rtems (2011-07-31)

rtems-vc at rtems.org rtems-vc at rtems.org
Sun Jul 31 17:11:32 UTC 2011


 *joel*:
2011-07-31	Joel Sherrill <joel.sherrilL at OARcorp.com>

	PR 1867/cpukit
	* Makefile.am, configure.ac, psx12/task.c, psxkey03/init.c,
	psxrwlock01/test.c: Correct implementation of pthread_exit() and
	pthread_join() to support the case where a thread is joinable but
	calls pthread_exit() before a thread has attempted to join.

M  1.348  testsuites/psxtests/ChangeLog
M   1.76  testsuites/psxtests/Makefile.am
M   1.84  testsuites/psxtests/configure.ac
M    1.8  testsuites/psxtests/psx12/task.c
M    1.8  testsuites/psxtests/psxkey03/init.c
M   1.17  testsuites/psxtests/psxrwlock01/test.c

diff -u rtems/testsuites/psxtests/ChangeLog:1.347 rtems/testsuites/psxtests/ChangeLog:1.348
--- rtems/testsuites/psxtests/ChangeLog:1.347	Fri Jul 22 15:23:20 2011
+++ rtems/testsuites/psxtests/ChangeLog	Sun Jul 31 11:16:17 2011
@@ -1,3 +1,11 @@
+2011-07-31	Joel Sherrill <joel.sherrilL at OARcorp.com>
+
+	PR 1867/cpukit
+	* Makefile.am, configure.ac, psx12/task.c, psxkey03/init.c,
+	psxrwlock01/test.c: Correct implementation of pthread_exit() and
+	pthread_join() to support the case where a thread is joinable but
+	calls pthread_exit() before a thread has attempted to join.
+
 2011-07-22	Joel Sherrill <joel.sherrill at oarcorp.com>
 
 	PR 1839/filesystem

diff -u rtems/testsuites/psxtests/Makefile.am:1.75 rtems/testsuites/psxtests/Makefile.am:1.76
--- rtems/testsuites/psxtests/Makefile.am:1.75	Mon Jun 20 00:37:02 2011
+++ rtems/testsuites/psxtests/Makefile.am	Sun Jul 31 11:16:17 2011
@@ -7,7 +7,8 @@
 SUBDIRS = psxclock
 if HAS_POSIX
 SUBDIRS += psxhdrs psx01 psx02 psx03 psx04 psx05 psx06 psx07 psx08 psx09 \
-    psx10 psx11 psx12 psx13 psx14 psx15 psxaio01 psxaio02 psxaio03 \
+    psx10 psx11 psx12 psx13 psx14 psx15 psx16 \
+    psxaio01 psxaio02 psxaio03 \
     psxalarm01 psxautoinit01 psxautoinit02 psxbarrier01 \
     psxcancel psxcancel01 psxclassic01 psxcleanup psxcleanup01 \
     psxcond01 psxenosys psxkey01 psxkey02 psxkey03 \

diff -u rtems/testsuites/psxtests/configure.ac:1.83 rtems/testsuites/psxtests/configure.ac:1.84
--- rtems/testsuites/psxtests/configure.ac:1.83	Tue Mar  8 16:10:38 2011
+++ rtems/testsuites/psxtests/configure.ac	Sun Jul 31 11:16:17 2011
@@ -96,6 +96,7 @@
 psx13/Makefile
 psx14/Makefile
 psx15/Makefile
+psx16/Makefile
 psxaio01/Makefile
 psxaio02/Makefile
 psxaio03/Makefile

diff -u rtems/testsuites/psxtests/psx12/task.c:1.7 rtems/testsuites/psxtests/psx12/task.c:1.8
--- rtems/testsuites/psxtests/psx12/task.c:1.7	Tue Feb 22 03:47:31 2011
+++ rtems/testsuites/psxtests/psx12/task.c	Sun Jul 31 11:16:17 2011
@@ -30,6 +30,11 @@
   void *argument
 )
 {
+  /*
+   * Detach ourselves so we don't wait for a join that won't happen.
+   */
+  pthread_detach( pthread_self() );
+
   puts( "Task_1: exitting" );
   pthread_exit( NULL );
 

diff -u rtems/testsuites/psxtests/psxkey03/init.c:1.7 rtems/testsuites/psxtests/psxkey03/init.c:1.8
--- rtems/testsuites/psxtests/psxkey03/init.c:1.7	Tue Feb 22 03:47:34 2011
+++ rtems/testsuites/psxtests/psxkey03/init.c	Sun Jul 31 11:16:17 2011
@@ -32,6 +32,11 @@
 {
   int sc;
 
+  /*
+   * Detach ourselves so we don't wait for a join that won't happen.
+   */
+  pthread_detach( pthread_self() );
+
   puts( "Test_Thread - pthread_setspecific - OK" );
   sc = pthread_setspecific( Key, key_value );
   rtems_test_assert( !sc );

diff -u rtems/testsuites/psxtests/psxrwlock01/test.c:1.16 rtems/testsuites/psxtests/psxrwlock01/test.c:1.17
--- rtems/testsuites/psxtests/psxrwlock01/test.c:1.16	Tue Feb 22 03:47:35 2011
+++ rtems/testsuites/psxtests/psxrwlock01/test.c	Sun Jul 31 11:16:17 2011
@@ -39,6 +39,11 @@
 {
   int status;
 
+  /*
+   * Detach ourselves so we don't wait for a join that won't happen.
+   */
+  pthread_detach( pthread_self() );
+
   puts( "ReadThread - pthread_rwlock_rdlock(RWLock) blocking -- OK" );
   status = pthread_rwlock_rdlock(&RWLock);
   rtems_test_assert( !status );
@@ -56,6 +61,11 @@
 {
   int status;
 
+  /*
+   * Detach ourselves so we don't wait for a join that won't happen.
+   */
+  pthread_detach( pthread_self() );
+
   puts( "WriteThread - pthread_rwlock_wrlock(RWLock) blocking -- OK" );
   status = pthread_rwlock_wrlock(&RWLock);
   rtems_test_assert( !status );


 *joel*:
branches:  1.1.2;  1.1.4;
file Makefile.am was initially added on branch rtems-4-10-branch.

A   NONE  testsuites/psxtests/psx16/Makefile.am

 *joel*:
branches:  1.1.2;  1.1.4;
file .cvsignore was initially added on branch rtems-4-10-branch.

A   NONE  testsuites/psxtests/psx16/.cvsignore

 *joel* (on branch rtems-4-10-branch):
2011-07-31	Joel Sherrill <joel.sherrilL at OARcorp.com>

	PR 1867/cpukit
	* Makefile.am, configure.ac, psx12/task.c, psxkey03/init.c,
	psxrwlock01/test.c: Correct implementation of pthread_exit() and
	pthread_join() to support the case where a thread is joinable but
	calls pthread_exit() before a thread has attempted to join.
	* psx16/.cvsignore, psx16/Makefile.am, psx16/init.c, psx16/psx16.doc,
	psx16/psx16.scn: New files.

M 1.264.2.4  testsuites/psxtests/ChangeLog
M 1.58.2.1  testsuites/psxtests/Makefile.am
M 1.61.2.4  testsuites/psxtests/configure.ac
M 1.6.8.1  testsuites/psxtests/psx12/task.c
M 1.1.2.1  testsuites/psxtests/psx16/.cvsignore
M 1.1.2.1  testsuites/psxtests/psx16/Makefile.am
M 1.1.2.1  testsuites/psxtests/psx16/init.c
M 1.1.2.1  testsuites/psxtests/psx16/psx16.doc
M 1.1.2.1  testsuites/psxtests/psx16/psx16.scn
M 1.5.2.1  testsuites/psxtests/psxkey03/init.c
M 1.13.2.1  testsuites/psxtests/psxrwlock01/test.c

diff -u rtems/testsuites/psxtests/ChangeLog:1.264.2.3 rtems/testsuites/psxtests/ChangeLog:1.264.2.4
--- rtems/testsuites/psxtests/ChangeLog:1.264.2.3	Tue Feb  8 00:38:03 2011
+++ rtems/testsuites/psxtests/ChangeLog	Sun Jul 31 11:16:42 2011
@@ -1,14 +1,24 @@
-2011-02-08	Ralf Corsépius <ralf.corsepius at rtems.org>
+2011-07-31	Joel Sherrill <joel.sherrilL at OARcorp.com>
+
+	PR 1867/cpukit
+	* Makefile.am, configure.ac, psx12/task.c, psxkey03/init.c,
+	psxrwlock01/test.c: Correct implementation of pthread_exit() and
+	pthread_join() to support the case where a thread is joinable but
+	calls pthread_exit() before a thread has attempted to join.
+	* psx16/.cvsignore, psx16/Makefile.am, psx16/init.c, psx16/psx16.doc,
+	psx16/psx16.scn: New files.
+
+2011-02-08	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* include/pmacros.h: Add PRIxblksize_t, PRIxblkcnt_t.
 	* configure.ac: Add AC_CHECK_SIZEOF([blksize_t]),
 	AC_CHECK_SIZEOF([blkcnt_t]).
 
-2011-02-02	Ralf Corsépius <ralf.corsepius at rtems.org>
+2011-02-02	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* configure.ac: Require autoconf-2.68, automake-1.11.1.
 
-2010-10-01	Ralf Corsépius <ralf.corsepius at rtems.org>
+2010-10-01	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* configure.ac: Check for pthread_attr_{get,set}cputime instead of 
 	pthread_pthread_attr_{get,set}cputime (Typo).
@@ -18,7 +28,7 @@
 	* psxfile01/test.c, psxmount/test.c, psxreaddir/test.c,
 	psxstat/test.c: Update to the new mount API.
 
-2010-05-29	Ralf Corsépius <ralf.corsepius at rtems.org>
+2010-05-29	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* configure.ac: Add AC_CHECK_SIZEOF(off_t).
 	* include/pmacros.h: Add PRIdoff_t.
@@ -55,7 +65,7 @@
 	psxhdrs/pthread22.c, psxhdrs/sched01.c, psxhdrs/sched03.c:
 	Reflect POSIX changes to sched_param.
 
-2010-04-02	Ralf Corsépius <ralf.corsepius at rtems.org>
+2010-04-02	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psxhdrs/proc01.c, psxhdrs/proc02.c, psxhdrs/proc07.c,
 	psxhdrs/proc08.c, psxhdrs/proc09.c, psxhdrs/proc10.c,
@@ -136,28 +146,28 @@
 	* psxenosys/Makefile.am: Add documentation file.
 	* psxenosys/psxenosys.doc: New file.
 
-2009-01-02	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-01-02	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psxsignal03/init.c: 
 	Print sigval.sival_ptr instead of "union sigval".
 
-2009-01-01	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-01-01	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psxstat/test.c: Apply PRI* macros to print struct stat fields.
 	* psxreaddir/test.c: Apply PRI* macros to print struct stat fields.
 	* psxfile01/test.c: Remove obsure #ifdef's.
 	Apply PRI* macros to print struct stat fields.
 
-2009-10-31	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-10-31	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* include/pmacros.h: Change TM_OCTOBER to 9, TM_NOVEMBER to 10,
 	TM_DECEMBER to 11 (tm_mon months start with JAN = 0).
 
-2009-10-31	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-10-31	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* include/pmacros.h: November is the 11th month.
 
-2009-10-30	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-10-30	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psxstat/test.c: Remove #ifdef's.
 	* psxmount/test.c, psxreaddir/test.c: Remove __P (unused anachronism).
@@ -169,7 +179,7 @@
 	rtems_object_api_minimum_class, rtems_object_api_maximum_class.
 	Reflect the prototypes having been missing to printf's.
 
-2009-10-29	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-10-29	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psxsysconf/init.c: 
 	Comment out sysconf(LONG_MAX) check (not useful).
@@ -179,11 +189,11 @@
 	* psx10/init.c: Pass 0x7FFF instead of 0xFFFFFF as invalid pshared
 	attribute to pthread_condattr_setpshared for 16bit target compliance.
 
-2009-10-28	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-10-28	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psxbarrier01/test.c: Include <tmacros.h>
 
-2009-10-27	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-10-27	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psx01/init.c, psx01/task.c, psx02/init.c, psx03/init.c,
 	psx04/init.c, psx05/init.c, psx06/init.c, psx07/init.c,
@@ -193,7 +203,7 @@
 	psxmsgq02/init.c, psxsignal01/init.c, psxualarm/init.c:
 	Use PRIxpthread_t to print pthread_t's.
 
-2009-10-27	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-10-27	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psxmsgq02/init.c:
 	Remove cast in call to fatal_posix_service_status_errno.
@@ -206,14 +216,14 @@
 	* configure.ac:
 	Add AC_CHECK_DECLS pthread_attr_getcputime, pthread_attr_setcputime.
 
-2009-10-27	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-10-27	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psxtimer01/psxtimer.c: Use %ld to print *.tv_nsec.
 	* psxsysconf/init.c: Use %ld to print *.tv_nsec.
 	* psxclock/init.c: Use %ld to print *.tv_nsec.
 	* psx06/init.c, psx06/system.h: Misc. warning fixes.
 
-2009-10-26	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-10-26	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psxsignal03/init.c: Add missing argument to printf.
 	* psxfile01/test.c: Use %zu instead of %d to print size_t's.
@@ -222,7 +232,7 @@
 	* configure.ac: Add AC_CHECK_HEADERS sys/mman.h.
 	Add AC_CHECK_DECLS pthread_atfork, adjtime, mprotect.
 
-2009-10-25	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-10-25	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psxtime/test.c: Include <sys/time.h>.
 	Conditionally add local prototype for adjtime()
@@ -236,27 +246,27 @@
 	if pthread.h doesn't supply it.
 	* psxkey01/init.c: Include "test_support.h".
 
-2009-10-25	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-10-25	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* configure.ac: Check for pthread_atfork in pthread.h.
 	* psxrwlock01/test.c: Conditionally add local prototype for
 	pthread_atfork() if pthread.h doesn't supply it.
 	Include <pthread.h>.
 
-2009-10-25	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-10-25	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* configure.ac: Check for sys/mman.h.
 	Check for mprotect in sys/mman.h.
 	* psxenosys/init.c: Conditionally add local prototype for
 	mprotect() if sys/mman.h doesn't supply it.
 
-2009-10-25	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-10-25	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* configure.ac: Check for pthread_rwlock_unlock in pthread.h.
 	* psxrwlock01/test.c: Conditionally add local prototype for
 	pthread_rwlock_unlock() if pthread.h doesn't supply it.
 
-2009-10-25	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-10-25	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psx01/init.c, psxalarm01/init.c, psxbarrier01/test.c,
 	psxclock/init.c, psxfatal01/testcase.h, psxfatal02/testcase.h,
@@ -273,7 +283,7 @@
 	* Makefile.am: Build file IO related tests even with POSIX threading is
 	disabled.
 
-2009-10-20	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-10-20	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* configure.ac: Don't add -ansi -fasm to CFLAGS.
 
@@ -768,7 +778,7 @@
 
 	* psxfile01/test.c: Change from int to size_t.
 
-2009-04-03	Ralf Corsépius <ralf.corsepius at rtems.org>
+2009-04-03	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psx01/Makefile.am, psx02/Makefile.am, psx03/Makefile.am,
 	psx04/Makefile.am, psx05/Makefile.am, psx06/Makefile.am,
@@ -816,7 +826,7 @@
 
 	* psx01/psx01.scn: Bump version to 4.9.99.0
 
-2008-09-06	Ralf Corsépius <ralf.corsepius at rtems.org>
+2008-09-06	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psxcleanup/psxcleanup.c, psxfatal_support/init.c,
 	psxfatal_support/system.h: Convert to "bool".
@@ -1044,7 +1054,7 @@
 	* psxrwlock01/main.c, psxrwlock01/test.c: Improve rwlock test to
 	include normal blocking and unblocking on timeout.
 
-2006-12-02	Ralf Corsépius <ralf.corsepius at rtems.org>
+2006-12-02	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* configure.ac: New BUG-REPORT address.
 
@@ -1078,11 +1088,11 @@
 	* psxsem01/init.c: Make sem_timedwait more conformant to Open Group
 	specification.
 
-2006-10-17	Ralf Corsépius <ralf.corsepius at rtems.org>
+2006-10-17	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* configure.ac: Require autoconf-2.60. Require automake-1.10.
 
-2006-07-11	Ralf Corsépius <ralf.corsepius at rtems.org>
+2006-07-11	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psx01/Makefile.am, psx02/Makefile.am, psx03/Makefile.am,
 	psx04/Makefile.am, psx05/Makefile.am, psx06/Makefile.am,
@@ -1268,7 +1278,7 @@
 	* psxfile01/test.c, psxmsgq01/init.c, psxstat/test.c,
 	psxtimer/psxtimer.c: Eliminate warnings and typos.
 
-2004-02-26	Sébastien Barré <sbarre at sdelcc.com>
+2004-02-26	Sébastien Barré <sbarre at sdelcc.com>
 
 	PR 582/core
 	* psxmsgq01/init.c, psxmsgq01/psxmsgq01.scn: Fix the POSIX message

diff -u rtems/testsuites/psxtests/Makefile.am:1.58 rtems/testsuites/psxtests/Makefile.am:1.58.2.1
--- rtems/testsuites/psxtests/Makefile.am:1.58	Mon Dec 28 10:43:10 2009
+++ rtems/testsuites/psxtests/Makefile.am	Sun Jul 31 11:16:43 2011
@@ -7,7 +7,7 @@
 SUBDIRS = psxclock
 if HAS_POSIX
 SUBDIRS += psxhdrs psx01 psx02 psx03 psx04 psx05 psx06 psx07 psx08 psx09 \
-    psx10 psx11 psx12 psx13 psx14 psxalarm01 \
+    psx10 psx11 psx12 psx13 psx14 psx16 psxalarm01 \
     psxautoinit01 psxautoinit02 psxbarrier01 \
     psxcancel psxcancel01 psxcleanup psxcleanup01 \
     psxcond01 psxenosys psxkey01 psxkey02 \

diff -u rtems/testsuites/psxtests/configure.ac:1.61.2.3 rtems/testsuites/psxtests/configure.ac:1.61.2.4
--- rtems/testsuites/psxtests/configure.ac:1.61.2.3	Tue Feb  8 00:38:03 2011
+++ rtems/testsuites/psxtests/configure.ac	Sun Jul 31 11:16:43 2011
@@ -74,6 +74,7 @@
 psx12/Makefile
 psx13/Makefile
 psx14/Makefile
+psx16/Makefile
 psxalarm01/Makefile
 psxautoinit01/Makefile
 psxautoinit02/Makefile

diff -u rtems/testsuites/psxtests/psx12/task.c:1.6 rtems/testsuites/psxtests/psx12/task.c:1.6.8.1
--- rtems/testsuites/psxtests/psx12/task.c:1.6	Thu Sep  4 13:53:38 2003
+++ rtems/testsuites/psxtests/psx12/task.c	Sun Jul 31 11:16:43 2011
@@ -26,6 +26,11 @@
   void *argument
 )
 {
+  /*
+   * Detach ourselves so we don't wait for a join that won't happen.
+   */
+  pthread_detach( pthread_self() );
+
   puts( "Task_1: exitting" );
   pthread_exit( NULL );
 

diff -u /dev/null rtems/testsuites/psxtests/psx16/.cvsignore:1.1.2.1
--- /dev/null	Sun Jul 31 12:11:27 2011
+++ rtems/testsuites/psxtests/psx16/.cvsignore	Sun Jul 31 11:16:43 2011
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in

diff -u /dev/null rtems/testsuites/psxtests/psx16/Makefile.am:1.1.2.1
--- /dev/null	Sun Jul 31 12:11:27 2011
+++ rtems/testsuites/psxtests/psx16/Makefile.am	Sun Jul 31 11:16:43 2011
@@ -0,0 +1,25 @@
+##
+## $Id$
+##
+
+rtems_tests_PROGRAMS = psx16
+psx16_SOURCES = init.c
+
+dist_rtems_tests_DATA = psx16.scn
+dist_rtems_tests_DATA += psx16.doc
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP at .cfg
+include $(top_srcdir)/../automake/compile.am
+include $(top_srcdir)/../automake/leaf.am
+
+AM_CPPFLAGS += -I$(top_srcdir)/include
+AM_CPPFLAGS += -I$(top_srcdir)/../support/include
+
+LINK_OBJS = $(psx16_OBJECTS) $(psx16_LDADD)
+LINK_LIBS = $(psx16_LDLIBS)
+
+psx16$(EXEEXT): $(psx16_OBJECTS) $(psx16_DEPENDENCIES)
+	@rm -f psx16$(EXEEXT)
+	$(make-exe)
+
+include $(top_srcdir)/../automake/local.am

diff -u /dev/null rtems/testsuites/psxtests/psx16/init.c:1.1.2.1
--- /dev/null	Sun Jul 31 12:11:27 2011
+++ rtems/testsuites/psxtests/psx16/init.c	Sun Jul 31 11:16:43 2011
@@ -0,0 +1,78 @@
+/*
+ *  COPYRIGHT (c) 1989-2011.
+ *  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.com/license/LICENSE.
+ *
+ *  $Id$
+ */
+
+#include <tmacros.h>
+#include "test_support.h"
+#include <pthread.h>
+
+int Index;
+
+void *TestThread(
+  void *argument
+)
+{
+  int *index = (int *)argument;
+
+  *index = 7; 
+
+  puts( "TestThread exiting" );
+  return argument;
+}
+
+void *POSIX_Init(
+  rtems_task_argument argument
+)
+{
+  int             status;
+  pthread_t       id;
+  pthread_attr_t  attr;
+  void           *join_return;
+
+  puts( "\n\n*** POSIX TEST PSX16 ***" );
+
+  Index = 5;
+
+  /* Initialize and set thread detached attribute */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  puts( "Creating TestThread" );
+  status = pthread_create( &id, &attr, TestThread, (void *)&Index );
+  rtems_test_assert( status == 0 );
+
+  /* let test thread run and exit */
+  puts( "Let TestThread run and exit before we attempt to join" );
+  sleep( 2 );
+
+  join_return = NULL;
+  status = pthread_join( id, &join_return );
+  rtems_test_assert( status == 0 );
+  rtems_test_assert( join_return == &Index );
+  rtems_test_assert( *(int *)join_return == 7 );
+  puts( "Successfully joined with TestThread" );
+
+  puts( "*** END OF POSIX TEST PSX16 ***" );
+
+  rtems_test_exit(0);
+}
+
+/* configuration information */
+
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+#define CONFIGURE_MAXIMUM_POSIX_THREADS        2
+
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
+/* end of file */

diff -u /dev/null rtems/testsuites/psxtests/psx16/psx16.doc:1.1.2.1
--- /dev/null	Sun Jul 31 12:11:27 2011
+++ rtems/testsuites/psxtests/psx16/psx16.doc	Sun Jul 31 11:16:43 2011
@@ -0,0 +1,24 @@
+#
+#  $Id$
+#
+#  COPYRIGHT (c) 1989-2011.
+#  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.com/license/LICENSE.
+#
+
+This file describes the directives and concepts tested by this test set.
+
+test set name:  psx16
+
+directives:
+
+  pthread_join
+  pthread_exit
+
+concepts:
+
++ Ensure that if a joinable thread exits before it has been joined,
+that it waits for a thread to call pthread_join.

diff -u /dev/null rtems/testsuites/psxtests/psx16/psx16.scn:1.1.2.1
--- /dev/null	Sun Jul 31 12:11:27 2011
+++ rtems/testsuites/psxtests/psx16/psx16.scn	Sun Jul 31 11:16:43 2011
@@ -0,0 +1,6 @@
+*** POSIX TEST PSX16 ***
+Creating TestThread
+Let TestThread run and exit before we attempt to join
+TestThread exiting
+Successfully joined with TestThread
+*** END OF POSIX TEST PSX16 ***

diff -u rtems/testsuites/psxtests/psxkey03/init.c:1.5 rtems/testsuites/psxtests/psxkey03/init.c:1.5.2.1
--- rtems/testsuites/psxtests/psxkey03/init.c:1.5	Tue Dec  8 11:52:53 2009
+++ rtems/testsuites/psxtests/psxkey03/init.c	Sun Jul 31 11:16:43 2011
@@ -28,6 +28,11 @@
 {
   int sc;
 
+  /*
+   * Detach ourselves so we don't wait for a join that won't happen.
+   */
+  pthread_detach( pthread_self() );
+
   puts( "Test_Thread - pthread_setspecific - OK" );
   sc = pthread_setspecific( Key, key_value );
   rtems_test_assert(  !sc );

diff -u rtems/testsuites/psxtests/psxrwlock01/test.c:1.13 rtems/testsuites/psxtests/psxrwlock01/test.c:1.13.2.1
--- rtems/testsuites/psxtests/psxrwlock01/test.c:1.13	Tue Dec  8 15:16:02 2009
+++ rtems/testsuites/psxtests/psxrwlock01/test.c	Sun Jul 31 11:16:43 2011
@@ -35,6 +35,11 @@
 {
   int status;
 
+  /*
+   * Detach ourselves so we don't wait for a join that won't happen.
+   */
+  pthread_detach( pthread_self() );
+
   puts( "ReadThread - pthread_rwlock_rdlock(RWLock) blocking -- OK" );
   status = pthread_rwlock_rdlock(&RWLock);
   rtems_test_assert(  !status );
@@ -52,6 +57,11 @@
 {
   int status;
 
+  /*
+   * Detach ourselves so we don't wait for a join that won't happen.
+   */
+  pthread_detach( pthread_self() );
+
   puts( "WriteThread - pthread_rwlock_wrlock(RWLock) blocking -- OK" );
   status = pthread_rwlock_wrlock(&RWLock);
   rtems_test_assert(  !status );


 *joel*:
file psx16.scn was added on branch rtems-4-9-branch on 2011-07-31 16:17:02 +0000

R    1.1  testsuites/psxtests/psx16/psx16.scn

 *joel*:
file init.c was added on branch rtems-4-9-branch on 2011-07-31 16:17:02 +0000

R    1.1  testsuites/psxtests/psx16/init.c

 *joel*:
file Makefile.am was added on branch rtems-4-9-branch on 2011-07-31 16:17:02 +0000

R    1.1  testsuites/psxtests/psx16/Makefile.am

 *joel*:
branches:  1.1.2;  1.1.4;
file init.c was initially added on branch rtems-4-10-branch.

A   NONE  testsuites/psxtests/psx16/init.c

 *joel*:
file .cvsignore was added on branch rtems-4-9-branch on 2011-07-31 16:17:02 +0000

R    1.1  testsuites/psxtests/psx16/.cvsignore

 *joel*:
branches:  1.1.2;  1.1.4;
file psx16.doc was initially added on branch rtems-4-10-branch.

A   NONE  testsuites/psxtests/psx16/psx16.doc

 *joel*:
branches:  1.1.2;  1.1.4;
file psx16.scn was initially added on branch rtems-4-10-branch.

A   NONE  testsuites/psxtests/psx16/psx16.scn

 *joel*:
file psx16.doc was added on branch rtems-4-9-branch on 2011-07-31 16:17:02 +0000

R    1.1  testsuites/psxtests/psx16/psx16.doc

 *joel* (on branch rtems-4-9-branch):
2011-07-31	Joel Sherrill <joel.sherrilL at OARcorp.com>

	PR 1867/cpukit
	* posix/src/pthreadexit.c, posix/src/pthreadjoin.c: Correct
	implementation of pthread_exit() and pthread_join() to support the
	case where a thread is joinable but calls pthread_exit() before a
	thread has attempted to join.

M 1.2892  cpukit/ChangeLog
M 1.1539.2.79  cpukit/ChangeLog
M 1.2346.2.100  cpukit/ChangeLog
M   1.13  cpukit/posix/src/pthreadexit.c
M 1.10.2.1  cpukit/posix/src/pthreadexit.c
M 1.12.2.1  cpukit/posix/src/pthreadexit.c
M   1.12  cpukit/posix/src/pthreadjoin.c
M 1.8.4.2  cpukit/posix/src/pthreadjoin.c
M 1.8.2.2  cpukit/posix/src/pthreadjoin.c

diff -u rtems/cpukit/ChangeLog:1.2891 rtems/cpukit/ChangeLog:1.2892
--- rtems/cpukit/ChangeLog:1.2891	Wed Jul 27 12:17:49 2011
+++ rtems/cpukit/ChangeLog	Sun Jul 31 11:15:59 2011
@@ -1,3 +1,11 @@
+2011-07-31	Joel Sherrill <joel.sherrilL at OARcorp.com>
+
+	PR 1867/cpukit
+	* posix/src/pthreadexit.c, posix/src/pthreadjoin.c: Correct
+	implementation of pthread_exit() and pthread_join() to support the
+	case where a thread is joinable but calls pthread_exit() before a
+	thread has attempted to join.
+
 2011-07-27	Joel Sherrill <joel.sherrilL at OARcorp.com>
 
 	* posix/src/pthread.c, posix/src/pthreadjoin.c: Revert accidental

diff -u rtems/cpukit/ChangeLog:1.1539.2.78 rtems/cpukit/ChangeLog:1.1539.2.79
--- rtems/cpukit/ChangeLog:1.1539.2.78	Sun Jul 24 15:26:12 2011
+++ rtems/cpukit/ChangeLog	Sun Jul 31 11:16:53 2011
@@ -1,3 +1,11 @@
+2011-07-31	Joel Sherrill <joel.sherrilL at OARcorp.com>
+
+	PR 1867/cpukit
+	* posix/src/pthreadexit.c, posix/src/pthreadjoin.c: Correct
+	implementation of pthread_exit() and pthread_join() to support the
+	case where a thread is joinable but calls pthread_exit() before a
+	thread has attempted to join.
+
 2011-07-24	Joel Sherrill <joel.sherrilL at OARcorp.com>
 
 	PR 1839/filesystem

diff -u rtems/cpukit/ChangeLog:1.2346.2.99 rtems/cpukit/ChangeLog:1.2346.2.100
--- rtems/cpukit/ChangeLog:1.2346.2.99	Sun Jul 31 09:12:27 2011
+++ rtems/cpukit/ChangeLog	Sun Jul 31 11:16:28 2011
@@ -1,5 +1,13 @@
 2011-07-31	Joel Sherrill <joel.sherrilL at OARcorp.com>
 
+	PR 1867/cpukit
+	* posix/src/pthreadexit.c, posix/src/pthreadjoin.c: Correct
+	implementation of pthread_exit() and pthread_join() to support the
+	case where a thread is joinable but calls pthread_exit() before a
+	thread has attempted to join.
+
+2011-07-31	Joel Sherrill <joel.sherrilL at OARcorp.com>
+
 	PR 1839/filesystem
 	* libcsupport/include/rtems/libio_.h, libcsupport/src/fchdir.c,
 	libcsupport/src/fdatasync.c, libcsupport/src/fpathconf.c,

diff -u rtems/cpukit/posix/src/pthreadexit.c:1.12 rtems/cpukit/posix/src/pthreadexit.c:1.13
--- rtems/cpukit/posix/src/pthreadexit.c:1.12	Mon Nov 30 09:44:21 2009
+++ rtems/cpukit/posix/src/pthreadexit.c	Sun Jul 31 11:16:00 2011
@@ -3,7 +3,7 @@
  *
  *  NOTE: Key destructors are executed in the POSIX api delete extension.
  *
- *  COPYRIGHT (c) 1989-2008.
+ *  COPYRIGHT (c) 1989-2011.
  *  On-Line Applications Research Corporation (OAR).
  *
  *  The license and distribution terms for this file may be
@@ -25,15 +25,21 @@
 #include <rtems/score/thread.h>
 #include <rtems/posix/pthread.h>
 
+
 void _POSIX_Thread_Exit(
   Thread_Control *the_thread,
   void           *value_ptr
 )
 {
-  Objects_Information     *the_information;
+  Objects_Information  *the_information;
+  Thread_Control       *unblocked;
+  POSIX_API_Control    *api;
 
   the_information = _Objects_Get_information_id( the_thread->Object.id );
 
+  api = the_thread->API_Extensions[ THREAD_API_POSIX ];
+
+
   /*
    * The_information has to be non-NULL.  Otherwise, we couldn't be
    * running in a thread of this API and class.
@@ -51,6 +57,31 @@
 
       the_thread->Wait.return_argument = value_ptr;
 
+      /*
+       * Process join
+       */
+      if ( api->detachstate == PTHREAD_CREATE_JOINABLE ) {
+        unblocked = _Thread_queue_Dequeue( &api->Join_List );
+        if ( unblocked ) {
+          do {
+            *(void **)unblocked->Wait.return_argument = value_ptr;
+          } while ( (unblocked = _Thread_queue_Dequeue( &api->Join_List )) );
+        } else {
+          _Thread_Set_state(
+            the_thread,
+            STATES_WAITING_FOR_JOIN_AT_EXIT | STATES_TRANSIENT
+          );
+           _RTEMS_Unlock_allocator();
+          _Thread_Enable_dispatch();
+          /* now waiting for thread to arrive */
+          _RTEMS_Lock_allocator();
+          _Thread_Disable_dispatch();
+        }
+      }
+
+      /*
+       *  Now shut down the thread
+       */
       _Thread_Close( the_information, the_thread );
 
       _POSIX_Threads_Free( the_thread );

diff -u rtems/cpukit/posix/src/pthreadexit.c:1.10 rtems/cpukit/posix/src/pthreadexit.c:1.10.2.1
--- rtems/cpukit/posix/src/pthreadexit.c:1.10	Thu May 22 15:38:03 2008
+++ rtems/cpukit/posix/src/pthreadexit.c	Sun Jul 31 11:16:55 2011
@@ -3,7 +3,7 @@
  *
  *  NOTE: Key destructors are executed in the POSIX api delete extension.
  *
- *  COPYRIGHT (c) 1989-2008.
+ *  COPYRIGHT (c) 1989-2011.
  *  On-Line Applications Research Corporation (OAR).
  *
  *  The license and distribution terms for this file may be
@@ -26,15 +26,21 @@
 #include <rtems/score/thread.h>
 #include <rtems/posix/pthread.h>
 
+
 void _POSIX_Thread_Exit(
   Thread_Control *the_thread,
   void           *value_ptr
 )
 {
-  Objects_Information     *the_information;
+  Objects_Information  *the_information;
+  Thread_Control       *unblocked;
+  POSIX_API_Control    *api;
 
   the_information = _Objects_Get_information_id( the_thread->Object.id );
 
+  api = the_thread->API_Extensions[ THREAD_API_POSIX ];
+
+
   /*
    * The_information has to be non-NULL.  Otherwise, we couldn't be 
    * running in a thread of this API and class.
@@ -52,6 +58,31 @@
 
       the_thread->Wait.return_argument = value_ptr;
 
+      /*
+       * Process join
+       */
+      if ( api->detachstate == PTHREAD_CREATE_JOINABLE ) {
+        unblocked = _Thread_queue_Dequeue( &api->Join_List );
+        if ( unblocked ) {
+          do {
+            *(void **)unblocked->Wait.return_argument = value_ptr;
+          } while ( (unblocked = _Thread_queue_Dequeue( &api->Join_List )) );
+        } else {
+          _Thread_Set_state(
+            the_thread,
+            STATES_WAITING_FOR_JOIN_AT_EXIT | STATES_TRANSIENT
+          );
+           _RTEMS_Unlock_allocator();
+          _Thread_Enable_dispatch();
+          /* now waiting for thread to arrive */
+          _RTEMS_Lock_allocator();
+          _Thread_Disable_dispatch();
+        }
+      }
+
+      /*
+       *  Now shut down the thread
+       */
       _Thread_Close( the_information, the_thread );
 
       _POSIX_Threads_Free( the_thread );

diff -u rtems/cpukit/posix/src/pthreadexit.c:1.12 rtems/cpukit/posix/src/pthreadexit.c:1.12.2.1
--- rtems/cpukit/posix/src/pthreadexit.c:1.12	Mon Nov 30 09:44:21 2009
+++ rtems/cpukit/posix/src/pthreadexit.c	Sun Jul 31 11:16:30 2011
@@ -3,7 +3,7 @@
  *
  *  NOTE: Key destructors are executed in the POSIX api delete extension.
  *
- *  COPYRIGHT (c) 1989-2008.
+ *  COPYRIGHT (c) 1989-2011.
  *  On-Line Applications Research Corporation (OAR).
  *
  *  The license and distribution terms for this file may be
@@ -25,15 +25,21 @@
 #include <rtems/score/thread.h>
 #include <rtems/posix/pthread.h>
 
+
 void _POSIX_Thread_Exit(
   Thread_Control *the_thread,
   void           *value_ptr
 )
 {
-  Objects_Information     *the_information;
+  Objects_Information  *the_information;
+  Thread_Control       *unblocked;
+  POSIX_API_Control    *api;
 
   the_information = _Objects_Get_information_id( the_thread->Object.id );
 
+  api = the_thread->API_Extensions[ THREAD_API_POSIX ];
+
+
   /*
    * The_information has to be non-NULL.  Otherwise, we couldn't be
    * running in a thread of this API and class.
@@ -51,6 +57,31 @@
 
       the_thread->Wait.return_argument = value_ptr;
 
+      /*
+       * Process join
+       */
+      if ( api->detachstate == PTHREAD_CREATE_JOINABLE ) {
+        unblocked = _Thread_queue_Dequeue( &api->Join_List );
+        if ( unblocked ) {
+          do {
+            *(void **)unblocked->Wait.return_argument = value_ptr;
+          } while ( (unblocked = _Thread_queue_Dequeue( &api->Join_List )) );
+        } else {
+          _Thread_Set_state(
+            the_thread,
+            STATES_WAITING_FOR_JOIN_AT_EXIT | STATES_TRANSIENT
+          );
+           _RTEMS_Unlock_allocator();
+          _Thread_Enable_dispatch();
+          /* now waiting for thread to arrive */
+          _RTEMS_Lock_allocator();
+          _Thread_Disable_dispatch();
+        }
+      }
+
+      /*
+       *  Now shut down the thread
+       */
       _Thread_Close( the_information, the_thread );
 
       _POSIX_Threads_Free( the_thread );

diff -u rtems/cpukit/posix/src/pthreadjoin.c:1.11 rtems/cpukit/posix/src/pthreadjoin.c:1.12
--- rtems/cpukit/posix/src/pthreadjoin.c:1.11	Wed Jul 27 12:17:49 2011
+++ rtems/cpukit/posix/src/pthreadjoin.c	Sun Jul 31 11:16:00 2011
@@ -52,12 +52,18 @@
        *  Put ourself on the threads join list
        */
 
-      _Thread_Executing->Wait.return_argument = &return_pointer;
-
-      _Thread_queue_Enter_critical_section( &api->Join_List );
-
-      _Thread_queue_Enqueue( &api->Join_List, WATCHDOG_NO_TIMEOUT );
-
+      if ( the_thread->current_state ==
+             (STATES_WAITING_FOR_JOIN_AT_EXIT | STATES_TRANSIENT) ) {
+         return_pointer = the_thread->Wait.return_argument;
+         _Thread_Clear_state(
+           the_thread,
+           (STATES_WAITING_FOR_JOIN_AT_EXIT | STATES_TRANSIENT)
+         );
+      } else {
+	_Thread_Executing->Wait.return_argument = &return_pointer;
+        _Thread_queue_Enter_critical_section( &api->Join_List );
+        _Thread_queue_Enqueue( &api->Join_List, WATCHDOG_NO_TIMEOUT );
+      }
       _Thread_Enable_dispatch();
 
       if ( value_ptr )

diff -u rtems/cpukit/posix/src/pthreadjoin.c:1.8.4.1 rtems/cpukit/posix/src/pthreadjoin.c:1.8.4.2
--- rtems/cpukit/posix/src/pthreadjoin.c:1.8.4.1	Tue Mar  8 16:14:56 2011
+++ rtems/cpukit/posix/src/pthreadjoin.c	Sun Jul 31 11:16:30 2011
@@ -52,12 +52,18 @@
        *  Put ourself on the threads join list
        */
 
-      _Thread_Executing->Wait.return_argument = &return_pointer;
-
-      _Thread_queue_Enter_critical_section( &api->Join_List );
-
-      _Thread_queue_Enqueue( &api->Join_List, WATCHDOG_NO_TIMEOUT );
-
+      if ( the_thread->current_state ==
+             (STATES_WAITING_FOR_JOIN_AT_EXIT | STATES_TRANSIENT) ) {
+         return_pointer = the_thread->Wait.return_argument;
+         _Thread_Clear_state(
+           the_thread,
+           (STATES_WAITING_FOR_JOIN_AT_EXIT | STATES_TRANSIENT)
+         );
+      } else {
+	_Thread_Executing->Wait.return_argument = &return_pointer;
+        _Thread_queue_Enter_critical_section( &api->Join_List );
+        _Thread_queue_Enqueue( &api->Join_List, WATCHDOG_NO_TIMEOUT );
+      }
       _Thread_Enable_dispatch();
 
       if ( value_ptr )

diff -u rtems/cpukit/posix/src/pthreadjoin.c:1.8.2.1 rtems/cpukit/posix/src/pthreadjoin.c:1.8.2.2
--- rtems/cpukit/posix/src/pthreadjoin.c:1.8.2.1	Tue Mar  8 16:15:07 2011
+++ rtems/cpukit/posix/src/pthreadjoin.c	Sun Jul 31 11:16:55 2011
@@ -52,12 +52,18 @@
        *  Put ourself on the threads join list
        */
 
-      _Thread_Executing->Wait.return_argument = &return_pointer;
-
-      _Thread_queue_Enter_critical_section( &api->Join_List );
-
-      _Thread_queue_Enqueue( &api->Join_List, WATCHDOG_NO_TIMEOUT );
-
+      if ( the_thread->current_state ==
+             (STATES_WAITING_FOR_JOIN_AT_EXIT | STATES_TRANSIENT) ) {
+         return_pointer = the_thread->Wait.return_argument;
+         _Thread_Clear_state(
+           the_thread,
+           (STATES_WAITING_FOR_JOIN_AT_EXIT | STATES_TRANSIENT)
+         );
+      } else {
+	_Thread_Executing->Wait.return_argument = &return_pointer;
+        _Thread_queue_Enter_critical_section( &api->Join_List );
+        _Thread_queue_Enqueue( &api->Join_List, WATCHDOG_NO_TIMEOUT );
+      }
       _Thread_Enable_dispatch();
 
       if ( value_ptr )


 *joel* (on branch rtems-4-9-branch):
2011-07-31	Joel Sherrill <joel.sherrilL at OARcorp.com>

	PR 1867/cpukit
	* Makefile.am, configure.ac, psx12/task.c, psxrwlock01/test.c: Correct
	implementation of pthread_exit() and pthread_join() to support the
	case where a thread is joinable but calls pthread_exit() before a
	thread has attempted to join.
	* psx16/.cvsignore, psx16/Makefile.am, psx16/init.c, psx16/psx16.doc,
	psx16/psx16.scn: New files.

M 1.125.2.1  testsuites/psxtests/ChangeLog
M 1.32.2.1  testsuites/psxtests/Makefile.am
M 1.31.2.1  testsuites/psxtests/configure.ac
M 1.6.6.1  testsuites/psxtests/psx12/task.c
M 1.1.4.2  testsuites/psxtests/psx16/.cvsignore
M 1.1.4.2  testsuites/psxtests/psx16/Makefile.am
M 1.1.4.2  testsuites/psxtests/psx16/init.c
M 1.1.4.2  testsuites/psxtests/psx16/psx16.doc
M 1.1.4.2  testsuites/psxtests/psx16/psx16.scn
M 1.4.2.1  testsuites/psxtests/psxrwlock01/test.c

diff -u rtems/testsuites/psxtests/ChangeLog:1.125 rtems/testsuites/psxtests/ChangeLog:1.125.2.1
--- rtems/testsuites/psxtests/ChangeLog:1.125	Fri Sep  5 22:33:27 2008
+++ rtems/testsuites/psxtests/ChangeLog	Sun Jul 31 11:17:02 2011
@@ -1,4 +1,14 @@
-2008-09-06	Ralf Corsépius <ralf.corsepius at rtems.org>
+2011-07-31	Joel Sherrill <joel.sherrilL at OARcorp.com>
+
+	PR 1867/cpukit
+	* Makefile.am, configure.ac, psx12/task.c, psxrwlock01/test.c: Correct
+	implementation of pthread_exit() and pthread_join() to support the
+	case where a thread is joinable but calls pthread_exit() before a
+	thread has attempted to join.
+	* psx16/.cvsignore, psx16/Makefile.am, psx16/init.c, psx16/psx16.doc,
+	psx16/psx16.scn: New files.
+
+2008-09-06	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psxcleanup/psxcleanup.c, psxfatal_support/init.c,
 	psxfatal_support/system.h: Convert to "bool".
@@ -226,7 +236,7 @@
 	* psxrwlock01/main.c, psxrwlock01/test.c: Improve rwlock test to
 	include normal blocking and unblocking on timeout.
 
-2006-12-02	Ralf Corsépius <ralf.corsepius at rtems.org>
+2006-12-02	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* configure.ac: New BUG-REPORT address.
 
@@ -260,11 +270,11 @@
 	* psxsem01/init.c: Make sem_timedwait more conformant to Open Group
 	specification.
 
-2006-10-17	Ralf Corsépius <ralf.corsepius at rtems.org>
+2006-10-17	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* configure.ac: Require autoconf-2.60. Require automake-1.10.
 
-2006-07-11	Ralf Corsépius <ralf.corsepius at rtems.org>
+2006-07-11	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* psx01/Makefile.am, psx02/Makefile.am, psx03/Makefile.am,
 	psx04/Makefile.am, psx05/Makefile.am, psx06/Makefile.am,
@@ -450,7 +460,7 @@
 	* psxfile01/test.c, psxmsgq01/init.c, psxstat/test.c,
 	psxtimer/psxtimer.c: Eliminate warnings and typos.
 
-2004-02-26	Sébastien Barré <sbarre at sdelcc.com>
+2004-02-26	Sébastien Barré <sbarre at sdelcc.com>
 
 	PR 582/core
 	* psxmsgq01/init.c, psxmsgq01/psxmsgq01.scn: Fix the POSIX message

diff -u rtems/testsuites/psxtests/Makefile.am:1.32 rtems/testsuites/psxtests/Makefile.am:1.32.2.1
--- rtems/testsuites/psxtests/Makefile.am:1.32	Mon Feb  4 13:39:43 2008
+++ rtems/testsuites/psxtests/Makefile.am	Sun Jul 31 11:17:02 2011
@@ -5,9 +5,9 @@
 ACLOCAL_AMFLAGS = -I ../aclocal
 
 SUBDIRS = psxhdrs psx01 psx02 psx03 psx04 psx05 psx06 psx07 psx08 psx09 \
-    psx10 psx11 psx12 psx13 psx14 psxcleanup psxtime psxtimer01 psxtimer02  \
-    psxcancel psxbarrier01 psxmsgq01 psxmsgq02 psxrwlock01 psxsem01 \
-    psxspin01 psxenosys psxsignal01 psxsysconf psxualarm psxkey01 \
+    psx10 psx11 psx12 psx13 psx14 psx16 psxcleanup psxtime psxtimer01 \
+    psxtimer02 psxcancel psxbarrier01 psxmsgq01 psxmsgq02 psxrwlock01
+    psxsem01 psxspin01 psxenosys psxsignal01 psxsysconf psxualarm psxkey01 \
     psxfatal01 psxfatal02
 
 ## File IO tests

diff -u rtems/testsuites/psxtests/configure.ac:1.31 rtems/testsuites/psxtests/configure.ac:1.31.2.1
--- rtems/testsuites/psxtests/configure.ac:1.31	Mon Feb  4 13:39:43 2008
+++ rtems/testsuites/psxtests/configure.ac	Sun Jul 31 11:17:02 2011
@@ -41,6 +41,7 @@
 psx12/Makefile
 psx13/Makefile
 psx14/Makefile
+psx16/Makefile
 psxbarrier01/Makefile
 psxcancel/Makefile
 psxchroot01/Makefile

diff -u rtems/testsuites/psxtests/psx12/task.c:1.6 rtems/testsuites/psxtests/psx12/task.c:1.6.6.1
--- rtems/testsuites/psxtests/psx12/task.c:1.6	Thu Sep  4 13:53:38 2003
+++ rtems/testsuites/psxtests/psx12/task.c	Sun Jul 31 11:17:02 2011
@@ -26,6 +26,11 @@
   void *argument
 )
 {
+  /*
+   * Detach ourselves so we don't wait for a join that won't happen.
+   */
+  pthread_detach( pthread_self() );
+
   puts( "Task_1: exitting" );
   pthread_exit( NULL );
 

diff -u /dev/null rtems/testsuites/psxtests/psx16/.cvsignore:1.1.4.2
--- /dev/null	Sun Jul 31 12:11:31 2011
+++ rtems/testsuites/psxtests/psx16/.cvsignore	Sun Jul 31 11:17:02 2011
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in

diff -u /dev/null rtems/testsuites/psxtests/psx16/Makefile.am:1.1.4.2
--- /dev/null	Sun Jul 31 12:11:31 2011
+++ rtems/testsuites/psxtests/psx16/Makefile.am	Sun Jul 31 11:17:02 2011
@@ -0,0 +1,25 @@
+##
+## $Id$
+##
+
+rtems_tests_PROGRAMS = psx16
+psx16_SOURCES = init.c
+
+dist_rtems_tests_DATA = psx16.scn
+dist_rtems_tests_DATA += psx16.doc
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP at .cfg
+include $(top_srcdir)/../automake/compile.am
+include $(top_srcdir)/../automake/leaf.am
+
+AM_CPPFLAGS += -I$(top_srcdir)/include
+AM_CPPFLAGS += -I$(top_srcdir)/../support/include
+
+LINK_OBJS = $(psx16_OBJECTS) $(psx16_LDADD)
+LINK_LIBS = $(psx16_LDLIBS)
+
+psx16$(EXEEXT): $(psx16_OBJECTS) $(psx16_DEPENDENCIES)
+	@rm -f psx16$(EXEEXT)
+	$(make-exe)
+
+include $(top_srcdir)/../automake/local.am

diff -u /dev/null rtems/testsuites/psxtests/psx16/init.c:1.1.4.2
--- /dev/null	Sun Jul 31 12:11:31 2011
+++ rtems/testsuites/psxtests/psx16/init.c	Sun Jul 31 11:17:02 2011
@@ -0,0 +1,78 @@
+/*
+ *  COPYRIGHT (c) 1989-2011.
+ *  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.com/license/LICENSE.
+ *
+ *  $Id$
+ */
+
+#include <tmacros.h>
+#include "test_support.h"
+#include <pthread.h>
+
+int Index;
+
+void *TestThread(
+  void *argument
+)
+{
+  int *index = (int *)argument;
+
+  *index = 7; 
+
+  puts( "TestThread exiting" );
+  return argument;
+}
+
+void *POSIX_Init(
+  rtems_task_argument argument
+)
+{
+  int             status;
+  pthread_t       id;
+  pthread_attr_t  attr;
+  void           *join_return;
+
+  puts( "\n\n*** POSIX TEST PSX16 ***" );
+
+  Index = 5;
+
+  /* Initialize and set thread detached attribute */
+  pthread_attr_init(&attr);
+  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+  puts( "Creating TestThread" );
+  status = pthread_create( &id, &attr, TestThread, (void *)&Index );
+  rtems_test_assert( status == 0 );
+
+  /* let test thread run and exit */
+  puts( "Let TestThread run and exit before we attempt to join" );
+  sleep( 2 );
+
+  join_return = NULL;
+  status = pthread_join( id, &join_return );
+  rtems_test_assert( status == 0 );
+  rtems_test_assert( join_return == &Index );
+  rtems_test_assert( *(int *)join_return == 7 );
+  puts( "Successfully joined with TestThread" );
+
+  puts( "*** END OF POSIX TEST PSX16 ***" );
+
+  rtems_test_exit(0);
+}
+
+/* configuration information */
+
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+#define CONFIGURE_MAXIMUM_POSIX_THREADS        2
+
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
+/* end of file */

diff -u /dev/null rtems/testsuites/psxtests/psx16/psx16.doc:1.1.4.2
--- /dev/null	Sun Jul 31 12:11:31 2011
+++ rtems/testsuites/psxtests/psx16/psx16.doc	Sun Jul 31 11:17:02 2011
@@ -0,0 +1,24 @@
+#
+#  $Id$
+#
+#  COPYRIGHT (c) 1989-2011.
+#  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.com/license/LICENSE.
+#
+
+This file describes the directives and concepts tested by this test set.
+
+test set name:  psx16
+
+directives:
+
+  pthread_join
+  pthread_exit
+
+concepts:
+
++ Ensure that if a joinable thread exits before it has been joined,
+that it waits for a thread to call pthread_join.

diff -u /dev/null rtems/testsuites/psxtests/psx16/psx16.scn:1.1.4.2
--- /dev/null	Sun Jul 31 12:11:32 2011
+++ rtems/testsuites/psxtests/psx16/psx16.scn	Sun Jul 31 11:17:02 2011
@@ -0,0 +1,6 @@
+*** POSIX TEST PSX16 ***
+Creating TestThread
+Let TestThread run and exit before we attempt to join
+TestThread exiting
+Successfully joined with TestThread
+*** END OF POSIX TEST PSX16 ***

diff -u rtems/testsuites/psxtests/psxrwlock01/test.c:1.4 rtems/testsuites/psxtests/psxrwlock01/test.c:1.4.2.1
--- rtems/testsuites/psxtests/psxrwlock01/test.c:1.4	Fri Aug 15 11:30:01 2008
+++ rtems/testsuites/psxtests/psxrwlock01/test.c	Sun Jul 31 11:17:02 2011
@@ -30,6 +30,11 @@
 {
   int status;
 
+  /*
+   * Detach ourselves so we don't wait for a join that won't happen.
+   */
+  pthread_detach( pthread_self() );
+
   puts( "ReadThread - pthread_rwlock_rdlock(RWLock) blocking -- OK" );
   status = pthread_rwlock_rdlock(&RWLock);
   assert( !status );
@@ -47,6 +52,11 @@
 {
   int status;
 
+  /*
+   * Detach ourselves so we don't wait for a join that won't happen.
+   */
+  pthread_detach( pthread_self() );
+
   puts( "WriteThread - pthread_rwlock_wrlock(RWLock) blocking -- OK" );
   status = pthread_rwlock_wrlock(&RWLock);
   assert( !status );



--

Generated by Deluxe Loginfo [http://www.codewiz.org/projects/index.html#loginfo] 2.122 by Bernardo Innocenti <bernie at develer.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/vc/attachments/20110731/0b4ebca1/attachment-0001.html>


More information about the vc mailing list