summaryrefslogtreecommitdiffstats
path: root/testsuites/psxtests/psxcancel/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuites/psxtests/psxcancel/init.c')
-rw-r--r--testsuites/psxtests/psxcancel/init.c119
1 files changed, 109 insertions, 10 deletions
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
}
+