11 static volatile int run
= 1;
20 for (i
= 0; i
< (sizeof(dummy
)/sizeof(dummy
[0])); i
++) {
26 high_load (void *unused
)
35 do_signal (void *unused
)
38 kill (getpid(), SIGUSR1
);
39 while (sem_wait(&sem
) < 0 && errno
== EINTR
);
44 /* See tcc-doc.info */
45 #ifdef __BOUNDS_CHECKING_ON
46 extern void __bound_checking (int no_check
);
47 #define BOUNDS_CHECKING_OFF __bound_checking(1)
48 #define BOUNDS_CHECKING_ON __bound_checking(-1)
50 #define BOUNDS_CHECKING_OFF
51 #define BOUNDS_CHECKING_ON
54 static void real_signal_handler(int sig
)
60 static void signal_handler(int sig
)
63 real_signal_handler(sig
);
73 struct timespec request
;
77 memset (&act
, 0, sizeof (act
));
78 act
.sa_handler
= signal_handler
;
80 sigemptyset (&act
.sa_mask
);
81 sigaction (SIGUSR1
, &act
, NULL
);
82 sem_init (&sem
, 1, 0);
83 pthread_create(&id1
, NULL
, high_load
, NULL
);
84 pthread_create(&id2
, NULL
, do_signal
, NULL
);
85 clock_gettime (CLOCK_MONOTONIC
, &request
);
89 while (clock_nanosleep (CLOCK_MONOTONIC
, TIMER_ABSTIME
, &request
, NULL
)) {
93 pthread_join(id1
, NULL
);
94 pthread_join(id2
, NULL
);
98 sigprocmask (SIG_SETMASK
, &m
, NULL
);
99 if (sigsetjmp (sj
, 0) == 0)
101 sigaddset (&m
, SIGUSR1
);
102 sigprocmask (SIG_SETMASK
, &m
, NULL
);
107 sigprocmask (SIG_SETMASK
, NULL
, &m
);
108 if (!sigismember (&m
, SIGUSR1
))