forked from Imagelibrary/rtems
2009-09-28 Joel Sherrill <joel.sherrill@OARcorp.com>
* Makefile.am, configure.ac: Add new test for calling pthread_cancel() from an ISR. * psxcancel01/.cvsignore, psxcancel01/Makefile.am, psxcancel01/init.c, psxcancel01/psxcancel01.doc, psxcancel01/psxcancel01.scn: New files.
This commit is contained in:
@@ -1,3 +1,10 @@
|
|||||||
|
2009-09-28 Joel Sherrill <joel.sherrill@OARcorp.com>
|
||||||
|
|
||||||
|
* Makefile.am, configure.ac: Add new test for calling pthread_cancel()
|
||||||
|
from an ISR.
|
||||||
|
* psxcancel01/.cvsignore, psxcancel01/Makefile.am, psxcancel01/init.c,
|
||||||
|
psxcancel01/psxcancel01.doc, psxcancel01/psxcancel01.scn: New files.
|
||||||
|
|
||||||
2009-09-26 Joel Sherrill <joel.sherrill@oarcorp.com>
|
2009-09-26 Joel Sherrill <joel.sherrill@oarcorp.com>
|
||||||
|
|
||||||
* psxfatal_support/init.c, psxfatal_support/system.h: Eliminate use of
|
* psxfatal_support/init.c, psxfatal_support/system.h: Eliminate use of
|
||||||
|
|||||||
@@ -8,11 +8,11 @@ SUBDIRS = psxclock
|
|||||||
if HAS_POSIX
|
if HAS_POSIX
|
||||||
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 psxautoinit01 psxautoinit02 psxbarrier01 \
|
psx10 psx11 psx12 psx13 psx14 psxautoinit01 psxautoinit02 psxbarrier01 \
|
||||||
psxcancel psxcleanup psxcond01 psxenosys psxkey01 psxkey02 psxkey03 \
|
psxcancel psxcancel01 psxcleanup psxcond01 psxenosys psxkey01 psxkey02 \
|
||||||
psxitimer psxmsgq01 psxmsgq02 psxmsgq03 psxmsgq04 psxmutexattr01 psxobj01 \
|
psxkey03 psxitimer psxmsgq01 psxmsgq02 psxmsgq03 psxmsgq04 \
|
||||||
psxrwlock01 psxsem01 psxsignal01 psxsignal02 psxsignal03 psxsignal04 \
|
psxmutexattr01 psxobj01 psxrwlock01 psxsem01 psxsignal01 psxsignal02 \
|
||||||
psxsignal05 psxspin01 psxspin02 psxsysconf psxtime psxtimer01 psxtimer02 \
|
psxsignal03 psxsignal04 psxsignal05 psxspin01 psxspin02 psxsysconf \
|
||||||
psxualarm psxfatal01 psxfatal02 \
|
psxtime psxtimer01 psxtimer02 psxualarm psxfatal01 psxfatal02 \
|
||||||
psxintrcritical01 psxstack01
|
psxintrcritical01 psxstack01
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ psxautoinit01/Makefile
|
|||||||
psxautoinit02/Makefile
|
psxautoinit02/Makefile
|
||||||
psxbarrier01/Makefile
|
psxbarrier01/Makefile
|
||||||
psxcancel/Makefile
|
psxcancel/Makefile
|
||||||
|
psxcancel01/Makefile
|
||||||
psxchroot01/Makefile
|
psxchroot01/Makefile
|
||||||
psxcleanup/Makefile
|
psxcleanup/Makefile
|
||||||
psxclock/Makefile
|
psxclock/Makefile
|
||||||
|
|||||||
2
testsuites/psxtests/psxcancel01/.cvsignore
Normal file
2
testsuites/psxtests/psxcancel01/.cvsignore
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
29
testsuites/psxtests/psxcancel01/Makefile.am
Normal file
29
testsuites/psxtests/psxcancel01/Makefile.am
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
##
|
||||||
|
## $Id$
|
||||||
|
##
|
||||||
|
|
||||||
|
MANAGERS = all
|
||||||
|
|
||||||
|
rtems_tests_PROGRAMS = psxcancel01
|
||||||
|
psxcancel01_SOURCES = init.c ../include/pmacros.h
|
||||||
|
|
||||||
|
dist_rtems_tests_DATA = psxcancel01.scn
|
||||||
|
dist_rtems_tests_DATA += psxcancel01.doc
|
||||||
|
|
||||||
|
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
|
||||||
|
include $(top_srcdir)/../automake/compile.am
|
||||||
|
include $(top_srcdir)/../automake/leaf.am
|
||||||
|
|
||||||
|
psxcancel01_LDADD = $(MANAGERS_NOT_WANTED:%=$(PROJECT_LIB)/no-%.rel)
|
||||||
|
|
||||||
|
AM_CPPFLAGS += -I$(top_srcdir)/include
|
||||||
|
AM_CPPFLAGS += -I$(top_srcdir)/../support/include
|
||||||
|
|
||||||
|
LINK_OBJS = $(psxcancel01_OBJECTS) $(psxcancel01_LDADD)
|
||||||
|
LINK_LIBS = $(psxcancel01_LDLIBS)
|
||||||
|
|
||||||
|
psxcancel01$(EXEEXT): $(psxcancel01_OBJECTS) $(psxcancel01_DEPENDENCIES)
|
||||||
|
@rm -f psxcancel01$(EXEEXT)
|
||||||
|
$(make-exe)
|
||||||
|
|
||||||
|
include $(top_srcdir)/../automake/local.am
|
||||||
85
testsuites/psxtests/psxcancel01/init.c
Normal file
85
testsuites/psxtests/psxcancel01/init.c
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
/*
|
||||||
|
* COPYRIGHT (c) 1989-1999.
|
||||||
|
* 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 <pmacros.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
volatile int Cancel_occurred;
|
||||||
|
volatile int Cancel_status;
|
||||||
|
|
||||||
|
rtems_timer_service_routine Cancel_duringISR_TSR(
|
||||||
|
rtems_id ignored_id,
|
||||||
|
void *ignored_address
|
||||||
|
)
|
||||||
|
{
|
||||||
|
Cancel_status = pthread_cancel( pthread_self() );
|
||||||
|
Cancel_occurred = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void *POSIX_Init(
|
||||||
|
void *argument
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
rtems_interval start;
|
||||||
|
rtems_interval end;
|
||||||
|
rtems_id timer_id;
|
||||||
|
|
||||||
|
puts( "\n\n*** POSIX TEST CANCEL 01 ***" );
|
||||||
|
|
||||||
|
status = rtems_timer_create(
|
||||||
|
rtems_build_name( 'T', 'M', '1', ' ' ),
|
||||||
|
&timer_id
|
||||||
|
);
|
||||||
|
assert( !status );
|
||||||
|
|
||||||
|
Cancel_occurred = 0;
|
||||||
|
Cancel_status = 0;
|
||||||
|
|
||||||
|
puts( "Init: schedule pthread_cancel from a TSR" );
|
||||||
|
status = rtems_timer_fire_after( timer_id, 10, Cancel_duringISR_TSR, NULL );
|
||||||
|
assert( !status );
|
||||||
|
|
||||||
|
/* cancel occurs during sleep */
|
||||||
|
|
||||||
|
do {
|
||||||
|
end = rtems_clock_get_ticks_since_boot();
|
||||||
|
} while ( !Cancel_occurred && ((end - start) <= 800));
|
||||||
|
|
||||||
|
if ( !Cancel_occurred ) {
|
||||||
|
puts( "Cancel did not occur" );
|
||||||
|
rtems_test_exit(0);
|
||||||
|
}
|
||||||
|
if ( Cancel_status != EPROTO ) {
|
||||||
|
printf( "Cancel returned %s\n", strerror(Cancel_status) );
|
||||||
|
rtems_test_exit(0);
|
||||||
|
}
|
||||||
|
puts( "pthread_cancel - from ISR returns EPROTO - OK" );
|
||||||
|
|
||||||
|
|
||||||
|
puts( "*** END OF POSIX TEST CANCEL 01 ***" );
|
||||||
|
rtems_test_exit(0);
|
||||||
|
return NULL; /* just so the compiler thinks we returned something */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* configuration information */
|
||||||
|
|
||||||
|
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
||||||
|
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
||||||
|
|
||||||
|
#define CONFIGURE_MAXIMUM_TIMERS 1
|
||||||
|
|
||||||
|
#define CONFIGURE_MAXIMUM_POSIX_THREADS 1
|
||||||
|
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
|
||||||
|
|
||||||
|
#define CONFIGURE_INIT
|
||||||
|
#include <rtems/confdefs.h>
|
||||||
22
testsuites/psxtests/psxcancel01/psxcancel01.doc
Normal file
22
testsuites/psxtests/psxcancel01/psxcancel01.doc
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
# COPYRIGHT (c) 1989-2009.
|
||||||
|
# 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: psxcancel01
|
||||||
|
|
||||||
|
directives:
|
||||||
|
|
||||||
|
pthread_cancel
|
||||||
|
|
||||||
|
concepts:
|
||||||
|
|
||||||
|
+ Ensure that invoking pthread_cancel() from an ISR returns the proper error.
|
||||||
4
testsuites/psxtests/psxcancel01/psxcancel01.scn
Normal file
4
testsuites/psxtests/psxcancel01/psxcancel01.scn
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
*** POSIX TEST CANCEL 01 ***
|
||||||
|
Init: schedule pthread_cancel from a TSR
|
||||||
|
pthread_cancel - from ISR returns EPROTO - OK
|
||||||
|
*** END OF POSIX TEST CANCEL 01 ***
|
||||||
Reference in New Issue
Block a user