summaryrefslogtreecommitdiffstats
path: root/c/src/tests/psxtests/psx04/task3.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1996-09-18 22:23:15 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1996-09-18 22:23:15 +0000
commit1f4f392a5f89245c31a4bb8da9ae0004fbde1081 (patch)
treeccff5bda8f361998932db876171d1128cc22bd90 /c/src/tests/psxtests/psx04/task3.c
parentnew files submitted by Craig Lebakken (lebakken@minn.net) and Derrick Ostertag (diff)
downloadrtems-1f4f392a5f89245c31a4bb8da9ae0004fbde1081.tar.bz2
new files
Diffstat (limited to '')
-rw-r--r--c/src/tests/psxtests/psx04/task3.c119
1 files changed, 119 insertions, 0 deletions
diff --git a/c/src/tests/psxtests/psx04/task3.c b/c/src/tests/psxtests/psx04/task3.c
new file mode 100644
index 0000000000..6eb14b9db7
--- /dev/null
+++ b/c/src/tests/psxtests/psx04/task3.c
@@ -0,0 +1,119 @@
+/* Task_3
+ *
+ * This routine serves as a test task.
+ *
+ * Input parameters:
+ * argument - task argument
+ *
+ * Output parameters: NONE
+ *
+ * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ * On-Line Applications Research Corporation (OAR).
+ * All rights assigned to U.S. Government, 1994.
+ *
+ * This material may be reproduced by or for the U.S. Government pursuant
+ * to the copyright license under the clause at DFARS 252.227-7013. This
+ * notice must appear in all copies of this file and its derivatives.
+ *
+ * $Id$
+ */
+
+#include "system.h"
+#include <signal.h>
+
+void *Task_3(
+ void *argument
+)
+{
+ int status;
+ int sig;
+ union sigval value;
+ sigset_t mask;
+ siginfo_t info;
+
+ value.sival_int = SIGUSR1;
+
+ printf( "Task_3: sigqueue SIGUSR1 with value= %d\n", value.sival_int );
+ status = sigqueue( getpid(), SIGUSR1, value );
+ assert( !status );
+
+ /* catch signal with sigwaitinfo */
+
+ empty_line();
+
+ status = sigemptyset( &mask );
+ assert( !status );
+
+ status = sigaddset( &mask, SIGUSR1 );
+ assert( !status );
+
+ printf( "Task_3: sigwaitinfo SIGUSR1 with value= %d\n", value.sival_int );
+ status = sigwaitinfo( &mask, &info );
+
+ /* switch to Init */
+
+ assert( !(status==-1) );
+ printf(
+ "Task_3: si_signo= %d si_code= %d value= %d\n",
+ info.si_signo,
+ info.si_code,
+ info.si_value.sival_int
+ );
+
+ /* catch signal with sigwait */
+
+ empty_line();
+
+ status = sigemptyset( &mask );
+ assert( !status );
+
+ status = sigaddset( &mask, SIGUSR1 );
+ assert( !status );
+
+ printf( "Task_3: sigwait SIGUSR1\n" );
+ status = sigwait( &mask, &sig );
+
+ /* switch to Init */
+
+ assert( !status );
+ printf( "Task_3: signo= %d\n", sig );
+
+ /* catch signal with pause */
+
+ empty_line();
+
+ status = sigemptyset( &mask );
+ assert( !status );
+
+ status = sigaddset( &mask, SIGUSR1 );
+ assert( !status );
+
+ printf( "Task_3: pause\n" );
+ status = pause( );
+
+ /* switch to Init */
+
+ assert( !(status==-1) );
+ printf( "Task_3: pause= %d\n", status );
+
+
+ /* send signal to Init task before it has pended for a signal */
+
+ empty_line();
+
+ printf( "Task_3: sending SIGUSR2\n" );
+ status = pthread_kill( Init_id, SIGUSR2 );
+ assert( !status );
+
+ printf( "Task_3: sleep so the Init task can reguest a signal\n" );
+ status = sleep( 1 );
+ assert( !status );
+
+ /* end of task 3 */
+ printf( "Task_3: exit\n" );
+ pthread_exit( NULL );
+
+ /* switch to Init */
+
+ return NULL; /* just so the compiler thinks we returned something */
+}