1 /* Example of a bad call within a signal handler.
2    'handler' calls 'custom_logger' which calls 'fprintf', and 'fprintf' is
3    not allowed from a signal handler.  */
4 
5 #include <stdio.h>
6 #include <signal.h>
7 
8 extern void body_of_program(void);
9 
10 int logging = 1;
11 
custom_logger(const char * msg)12 void custom_logger(const char *msg)
13 {
14   if (logging)
15     fprintf(stderr, "LOG: %s", msg); /* { dg-warning "call to 'fprintf' from within signal handler" } */
16 }
17 
handler(int signum)18 static void handler(int signum)
19 {
20   custom_logger("got signal");
21 }
22 
main(int argc,const char * argv)23 int main(int argc, const char *argv)
24 {
25   custom_logger("started");
26 
27   signal(SIGINT, handler); /* { dg-message "registering 'handler' as signal handler" } */
28 
29   body_of_program();
30 
31   custom_logger("stopped");
32 
33   return 0;
34 }
35