forked from Imagelibrary/rtems
2011-07-31 Joel Sherrill <joel.sherrilL@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.
This commit is contained in:
@@ -1,4 +1,14 @@
|
||||
2008-09-06 Ralf Corsépius <ralf.corsepius@rtems.org>
|
||||
2011-07-31 Joel Sherrill <joel.sherrilL@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@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@rtems.org>
|
||||
2006-12-02 Ralf Corsépius <ralf.corsepius@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@rtems.org>
|
||||
2006-10-17 Ralf Corsépius <ralf.corsepius@rtems.org>
|
||||
|
||||
* configure.ac: Require autoconf-2.60. Require automake-1.10.
|
||||
|
||||
2006-07-11 Ralf Corsépius <ralf.corsepius@rtems.org>
|
||||
2006-07-11 Ralf Corsépius <ralf.corsepius@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@sdelcc.com>
|
||||
2004-02-26 Sébastien Barré <sbarre@sdelcc.com>
|
||||
|
||||
PR 582/core
|
||||
* psxmsgq01/init.c, psxmsgq01/psxmsgq01.scn: Fix the POSIX message
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -41,6 +41,7 @@ psx11/Makefile
|
||||
psx12/Makefile
|
||||
psx13/Makefile
|
||||
psx14/Makefile
|
||||
psx16/Makefile
|
||||
psxbarrier01/Makefile
|
||||
psxcancel/Makefile
|
||||
psxchroot01/Makefile
|
||||
|
||||
@@ -26,6 +26,11 @@ void *Task_1(
|
||||
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 );
|
||||
|
||||
|
||||
2
testsuites/psxtests/psx16/.cvsignore
Normal file
2
testsuites/psxtests/psx16/.cvsignore
Normal file
@@ -0,0 +1,2 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
25
testsuites/psxtests/psx16/Makefile.am
Normal file
25
testsuites/psxtests/psx16/Makefile.am
Normal file
@@ -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@.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
|
||||
78
testsuites/psxtests/psx16/init.c
Normal file
78
testsuites/psxtests/psx16/init.c
Normal file
@@ -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 */
|
||||
24
testsuites/psxtests/psx16/psx16.doc
Normal file
24
testsuites/psxtests/psx16/psx16.doc
Normal file
@@ -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.
|
||||
6
testsuites/psxtests/psx16/psx16.scn
Normal file
6
testsuites/psxtests/psx16/psx16.scn
Normal file
@@ -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 ***
|
||||
@@ -30,6 +30,11 @@ void *ReadLockThread(void *arg)
|
||||
{
|
||||
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 @@ void *WriteLockThread(void *arg)
|
||||
{
|
||||
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 );
|
||||
|
||||
Reference in New Issue
Block a user