source: rtems/testsuites/psxtests/psx04/task3.c @ c499856

4.115
Last change on this file since c499856 was c499856, checked in by Chris Johns <chrisj@…>, on 03/20/14 at 21:10:47

Change all references of rtems.com to rtems.org.

  • Property mode set to 100644
File size: 2.6 KB
Line 
1/*  Task_3
2 *
3 *  This routine serves as a test task.
4 *
5 *  Input parameters:
6 *    argument - task argument
7 *
8 *  Output parameters:  NONE
9 *
10 *  COPYRIGHT (c) 1989-2011.
11 *  On-Line Applications Research Corporation (OAR).
12 *
13 *  The license and distribution terms for this file may be
14 *  found in the file LICENSE in this distribution or at
15 *  http://www.rtems.org/license/LICENSE.
16 */
17
18#ifdef HAVE_CONFIG_H
19#include "config.h"
20#endif
21
22#include "system.h"
23#include <signal.h>
24
25void *Task_3(
26  void *argument
27)
28{
29  unsigned int  remaining;
30  int           status;
31  int           sig;
32  volatile union sigval  value; /* should be removed once the H8300 target is fixed */
33  sigset_t      mask;
34  siginfo_t     info;
35
36  value.sival_int = SIGUSR1;
37
38  printf( "Task_3: sigqueue SIGUSR1 with value= %d\n", value.sival_int );
39  status = sigqueue( getpid(), SIGUSR1, value );
40  rtems_test_assert( !status );
41
42     /* catch signal with sigwaitinfo */
43
44  empty_line();
45
46  status = sigemptyset( &mask );
47  rtems_test_assert( !status );
48
49  status = sigaddset( &mask, SIGUSR1 );
50  rtems_test_assert( !status );
51
52  printf( "Task_3: sigwaitinfo SIGUSR1 with value= %d\n", value.sival_int );
53  status = sigwaitinfo( &mask, &info );
54
55     /* switch to Init */
56
57  rtems_test_assert( !(status==-1) );
58  printf(
59    "Task_3: si_signo= %d si_code= %d value= %d\n",
60    info.si_signo,
61    info.si_code,
62    info.si_value.sival_int
63  );
64
65     /* catch signal with sigwait */
66
67  empty_line();
68
69  status = sigemptyset( &mask );
70  rtems_test_assert( !status );
71
72  status = sigaddset( &mask, SIGUSR1 );
73  rtems_test_assert( !status );
74
75  printf( "Task_3: sigwait SIGUSR1\n" );
76  status = sigwait( &mask, &sig );
77
78     /* switch to Init */
79
80  rtems_test_assert( !status );
81  printf( "Task_3: signo= %d\n", sig );
82
83     /* catch signal with pause */
84
85  empty_line();
86
87  status = sigemptyset( &mask );
88  rtems_test_assert( !status );
89
90  status = sigaddset( &mask, SIGUSR1 );
91  rtems_test_assert( !status );
92
93  printf( "Task_3: pause\n" );
94  status = pause( );
95
96     /* switch to Init */
97
98  rtems_test_assert( !(status==-1) );
99  printf( "Task_3: pause= %d\n", status );
100
101
102     /* send signal to Init task before it has pended for a signal */
103
104  empty_line();
105
106  printf( "Task_3: sending SIGUSR2\n" );
107  status = pthread_kill( Init_id, SIGUSR2 );
108  rtems_test_assert( !status );
109
110  printf( "Task_3: sleep so the Init task can reguest a signal\n" );
111  remaining = sleep( 1 );
112  rtems_test_assert( !status );
113  rtems_test_assert( remaining == 0 );
114
115     /* end of task 3 */
116  printf( "Task_3: exit\n" );
117  pthread_exit( NULL );
118
119     /* switch to Init */
120
121  return NULL; /* just so the compiler thinks we returned something */
122}
Note: See TracBrowser for help on using the repository browser.