9 static void sig_usr1(int);
11 static pthread_t main_thread
;
14 child_main(void *no_args
)
18 // Only do it once, to shorten test --njn
19 // for (i = 0; i < 5; ++i)
22 fprintf (stdout
, "thread CHILD sending SIGUSR1 to thread MAIN\n");
23 if (pthread_kill (main_thread
, SIGUSR1
) != 0)
24 fprintf (stderr
, "error doing pthread_kill\n");
33 struct sigaction sigact
;
34 sigset_t newmask
, oldmask
;
37 memset(&newmask
, 0, sizeof newmask
);
38 sigemptyset (&newmask
);
39 sigaddset (&newmask
, SIGUSR1
);
41 if (pthread_sigmask (SIG_BLOCK
, &newmask
, &oldmask
) != 0)
42 fprintf (stderr
, "SIG_BLOCK error");
44 memset (&sigact
, 0, sizeof sigact
);
45 sigact
.sa_handler
= sig_usr1
;
46 if (sigaction(SIGUSR1
, &sigact
, NULL
) != 0)
47 fprintf (stderr
, "signal(SIGINT) error");
49 main_thread
= pthread_self ();
50 if (pthread_create (&child
, NULL
, child_main
, NULL
) != 0)
51 fprintf (stderr
, "error creating thread");
53 pthread_join (child
, NULL
);
61 fprintf (stderr
, "SHOULD NOT BE HERE (SIGUSR1)!!!!\n");