summaryrefslogtreecommitdiffstats
path: root/testsuites/psxtests
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2002-07-05 18:07:49 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2002-07-05 18:07:49 +0000
commit4f234daac3504dbc5bcd7f88315cf7f5ad0626e7 (patch)
tree9f961913788ee2980d75f535b0cb3244564a7044 /testsuites/psxtests
parent2002-07-05 Ralf Corsepius <corsepiu@faw.uni-ulm.de> (diff)
downloadrtems-4f234daac3504dbc5bcd7f88315cf7f5ad0626e7.tar.bz2
2002-07-05 Joel Sherrill <joel@OARcorp.com>
* psxcancel/Makefile.am, psxcancel/init.c, psxcancel/psxcancel.scn: Updated as part of PR164 which reported problems with the RTEMS implementation of pthread_cancel.
Diffstat (limited to 'testsuites/psxtests')
-rw-r--r--testsuites/psxtests/ChangeLog6
-rw-r--r--testsuites/psxtests/psxcancel/Makefile.am2
-rw-r--r--testsuites/psxtests/psxcancel/init.c119
-rw-r--r--testsuites/psxtests/psxcancel/psxcancel.scn13
4 files changed, 128 insertions, 12 deletions
diff --git a/testsuites/psxtests/ChangeLog b/testsuites/psxtests/ChangeLog
index ba856c1ea7..22d93e57ec 100644
--- a/testsuites/psxtests/ChangeLog
+++ b/testsuites/psxtests/ChangeLog
@@ -1,3 +1,9 @@
+2002-07-05 Joel Sherrill <joel@OARcorp.com>
+
+ * psxcancel/Makefile.am, psxcancel/init.c, psxcancel/psxcancel.scn:
+ Updated as part of PR164 which reported problems with the RTEMS
+ implementation of pthread_cancel.
+
2001-04-26 Joel Sherrill <joel@OARcorp.com>
* psxmsgq01/init.c: Reflect changes made to address PR81 that
diff --git a/testsuites/psxtests/psxcancel/Makefile.am b/testsuites/psxtests/psxcancel/Makefile.am
index 054c6e6d6c..0991f3409e 100644
--- a/testsuites/psxtests/psxcancel/Makefile.am
+++ b/testsuites/psxtests/psxcancel/Makefile.am
@@ -10,7 +10,7 @@ MANAGERS = all
C_FILES = init.c
C_O_FILES = $(C_FILES:%.c=${ARCH}/%.o)
-H_FILES = system.h
+H_FILES =
noinst_HEADERS = $(H_FILES)
DOCTYPES = scn
diff --git a/testsuites/psxtests/psxcancel/init.c b/testsuites/psxtests/psxcancel/init.c
index 26536dad95..ada11bdd8d 100644
--- a/testsuites/psxtests/psxcancel/init.c
+++ b/testsuites/psxtests/psxcancel/init.c
@@ -1,6 +1,9 @@
-/*
- * COPYRIGHT (c) 1989-1999.
- * On-Line Applications Research Corporation (OAR).
+/*
+ * Thread Test Program
+ *
+ * - test of POSIX's pthread_init() function from rtemstask Init()
+ *
+ * ott@linux.thai.net
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -9,19 +12,115 @@
* $Id$
*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <sys/time.h>
+
+#ifdef __rtems__
+#include <rtems.h>
+/* configuration information */
+
#define CONFIGURE_INIT
-#include "system.h"
+
+#include <unistd.h>
+#include <errno.h>
#include <sched.h>
-void *POSIX_Init(
- void *argument
-)
-{
+#include <bsp.h> /* for device driver prototypes */
+
+rtems_task Init( rtems_task_argument argument);
+
+/* configuration information */
+
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 3
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+#define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE)
+
+#define CONFIGURE_MAXIMUM_POSIX_THREADS 5
+#define CONFIGURE_MAXIMUM_POSIX_MUTEXES 5
+#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES 5
+
+#include <console.h>
+#include <confdefs.h>
+
+#endif /* __rtems__ */
+
+void countTaskDeferred() {
+ int i=0;
+ int type,state;
+
+ pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &type);
+ pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &state);
+ while (1) {
+ printf("countTaskDeferred: elapsed time (second): %2d\n", i++ );
+ sleep(1);
+ pthread_testcancel();
+ }
+}
+
+void countTaskAsync() {
+ int i=0;
+ int type,state;
+
+ pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &type);
+ pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &state);
+ while (1) {
+ printf("countTaskAsync: elapsed time (second): %2d\n", i++ );
+ sleep(1);
+ }
+}
+
+#ifdef __linux__
+int main(){
+#else
+ rtems_task Init( rtems_task_argument ignored ) {
+#endif
+
+ pthread_t count;
+ int taskparameter = 0;
puts( "\n\n*** POSIX CANCEL TEST ***" );
+ /* Start countTask deferred */
+ {
+ int task_ret;
+ task_ret = pthread_create(&count, NULL, (void *) countTaskDeferred, (void *) &taskparameter);
+ if (task_ret) {
+ perror("pthread_create: countTask");
+ exit(EXIT_FAILURE);
+ }
+ /* sleep for 5 seconds, then cancel it */
+ sleep(5);
+ pthread_cancel(count);
+ pthread_join(count,NULL);
+ }
+
+ /* Start countTask asynchronous */
+ {
+ int task_ret;
+ task_ret = pthread_create(&count, NULL, (void *) countTaskAsync, (void *) &taskparameter);
+ if (task_ret) {
+ perror("pthread_create: countTask");
+ exit(EXIT_FAILURE);
+ }
+ /* sleep for 5 seconds, then cancel it */
+ sleep(5);
+ pthread_cancel(count);
+ pthread_join(count,NULL);
+ }
+
+
puts( "*** END OF POSIX CANCEL TEST ***" );
- exit( 0 );
- return NULL; /* just so the compiler thinks we returned something */
+#ifdef __linux__
+ return 0;
+#else
+ exit(EXIT_SUCCESS);
+#endif
}
+
diff --git a/testsuites/psxtests/psxcancel/psxcancel.scn b/testsuites/psxtests/psxcancel/psxcancel.scn
index f6ef3ac9d3..bb5c7d58e0 100644
--- a/testsuites/psxtests/psxcancel/psxcancel.scn
+++ b/testsuites/psxtests/psxcancel/psxcancel.scn
@@ -1,3 +1,14 @@
-*** POSIX CANCEL TEST ***
+
+*** POSIX CANCEL TEST ***
+countTaskDeferred: elapsed time (second): 0
+countTaskDeferred: elapsed time (second): 1
+countTaskDeferred: elapsed time (second): 2
+countTaskDeferred: elapsed time (second): 3
+countTaskDeferred: elapsed time (second): 4
+countTaskAsync: elapsed time (second): 0
+countTaskAsync: elapsed time (second): 1
+countTaskAsync: elapsed time (second): 2
+countTaskAsync: elapsed time (second): 3
+countTaskAsync: elapsed time (second): 4
*** END OF POSIX CANCEL TEST ***