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,
|
* psxcleanup/psxcleanup.c, psxfatal_support/init.c,
|
||||||
psxfatal_support/system.h: Convert to "bool".
|
psxfatal_support/system.h: Convert to "bool".
|
||||||
@@ -226,7 +236,7 @@
|
|||||||
* psxrwlock01/main.c, psxrwlock01/test.c: Improve rwlock test to
|
* psxrwlock01/main.c, psxrwlock01/test.c: Improve rwlock test to
|
||||||
include normal blocking and unblocking on timeout.
|
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.
|
* configure.ac: New BUG-REPORT address.
|
||||||
|
|
||||||
@@ -260,11 +270,11 @@
|
|||||||
* psxsem01/init.c: Make sem_timedwait more conformant to Open Group
|
* psxsem01/init.c: Make sem_timedwait more conformant to Open Group
|
||||||
specification.
|
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.
|
* 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,
|
* psx01/Makefile.am, psx02/Makefile.am, psx03/Makefile.am,
|
||||||
psx04/Makefile.am, psx05/Makefile.am, psx06/Makefile.am,
|
psx04/Makefile.am, psx05/Makefile.am, psx06/Makefile.am,
|
||||||
@@ -450,7 +460,7 @@
|
|||||||
* psxfile01/test.c, psxmsgq01/init.c, psxstat/test.c,
|
* psxfile01/test.c, psxmsgq01/init.c, psxstat/test.c,
|
||||||
psxtimer/psxtimer.c: Eliminate warnings and typos.
|
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
|
PR 582/core
|
||||||
* psxmsgq01/init.c, psxmsgq01/psxmsgq01.scn: Fix the POSIX message
|
* psxmsgq01/init.c, psxmsgq01/psxmsgq01.scn: Fix the POSIX message
|
||||||
|
|||||||
@@ -5,9 +5,9 @@
|
|||||||
ACLOCAL_AMFLAGS = -I ../aclocal
|
ACLOCAL_AMFLAGS = -I ../aclocal
|
||||||
|
|
||||||
SUBDIRS = psxhdrs psx01 psx02 psx03 psx04 psx05 psx06 psx07 psx08 psx09 \
|
SUBDIRS = psxhdrs psx01 psx02 psx03 psx04 psx05 psx06 psx07 psx08 psx09 \
|
||||||
psx10 psx11 psx12 psx13 psx14 psxcleanup psxtime psxtimer01 psxtimer02 \
|
psx10 psx11 psx12 psx13 psx14 psx16 psxcleanup psxtime psxtimer01 \
|
||||||
psxcancel psxbarrier01 psxmsgq01 psxmsgq02 psxrwlock01 psxsem01 \
|
psxtimer02 psxcancel psxbarrier01 psxmsgq01 psxmsgq02 psxrwlock01
|
||||||
psxspin01 psxenosys psxsignal01 psxsysconf psxualarm psxkey01 \
|
psxsem01 psxspin01 psxenosys psxsignal01 psxsysconf psxualarm psxkey01 \
|
||||||
psxfatal01 psxfatal02
|
psxfatal01 psxfatal02
|
||||||
|
|
||||||
## File IO tests
|
## File IO tests
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ psx11/Makefile
|
|||||||
psx12/Makefile
|
psx12/Makefile
|
||||||
psx13/Makefile
|
psx13/Makefile
|
||||||
psx14/Makefile
|
psx14/Makefile
|
||||||
|
psx16/Makefile
|
||||||
psxbarrier01/Makefile
|
psxbarrier01/Makefile
|
||||||
psxcancel/Makefile
|
psxcancel/Makefile
|
||||||
psxchroot01/Makefile
|
psxchroot01/Makefile
|
||||||
|
|||||||
@@ -26,6 +26,11 @@ void *Task_1(
|
|||||||
void *argument
|
void *argument
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Detach ourselves so we don't wait for a join that won't happen.
|
||||||
|
*/
|
||||||
|
pthread_detach( pthread_self() );
|
||||||
|
|
||||||
puts( "Task_1: exitting" );
|
puts( "Task_1: exitting" );
|
||||||
pthread_exit( NULL );
|
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;
|
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" );
|
puts( "ReadThread - pthread_rwlock_rdlock(RWLock) blocking -- OK" );
|
||||||
status = pthread_rwlock_rdlock(&RWLock);
|
status = pthread_rwlock_rdlock(&RWLock);
|
||||||
assert( !status );
|
assert( !status );
|
||||||
@@ -47,6 +52,11 @@ void *WriteLockThread(void *arg)
|
|||||||
{
|
{
|
||||||
int status;
|
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" );
|
puts( "WriteThread - pthread_rwlock_wrlock(RWLock) blocking -- OK" );
|
||||||
status = pthread_rwlock_wrlock(&RWLock);
|
status = pthread_rwlock_wrlock(&RWLock);
|
||||||
assert( !status );
|
assert( !status );
|
||||||
|
|||||||
Reference in New Issue
Block a user