2 #include <fosa_long_jump.h>
3 #include <fosa_threads_and_signals.h>
9 fosa_long_jump_context_t ctx;
13 fosa_signal_info_t ctx_info;
16 pthread_sigmask (SIG_SETMASK, NULL, &s);
17 printf (">>> Current signal mask = 0x%x\n", (unsigned int) s.sig);
19 assert (fosa_long_jump_save_context (NULL));
21 printf (">>> save context\n\n");
22 if (fosa_long_jump_save_context (&ctx)) {
23 printf ("fosa_long_jump_save_context");
27 printf (">>> check jump performed\n\n");
28 if (fosa_long_jump_was_performed ((const fosa_long_jump_context_t *) &ctx, &jmp)) {
29 printf ("fosa_long_jump_was_performed");
34 printf ("\t <<<< JUMPED\n\n");
35 pthread_sigmask (SIG_SETMASK, NULL, &s);
36 printf (">>> Current signal mask = 0x%x\n",(unsigned int) s.sig);
40 printf (">>> install handler\n\n");
41 if (fosa_long_jump_install_handler (&sig, &th)) {
42 printf ("fosa_long_jump_install_handler()");
46 printf ("\t signal=%d, thread=0x%x (self=0x%x)\n", sig, (unsigned int) th, (unsigned int) fosa_thread_self());
48 printf (">>> trigger a long jump using a signal\n\n");
49 ctx_info.sival_ptr = &ctx;
50 if (fosa_signal_queue (sig, ctx_info, th)) {
51 printf ("fosa_signal_queue");
62 sigaddset (&s, SIGRTMIN);
63 sigaddset (&s, SIGRTMAX);
64 pthread_sigmask (SIG_SETMASK, &s, NULL);