2 #include <fosa_long_jump.h>
3 #include <fosa_threads_and_signals.h>
8 fosa_long_jump_context_t ctx;
12 fosa_signal_info_t ctx_info;
15 pthread_sigmask (SIG_SETMASK, NULL, &s);
16 printf (">>> Current signal mask = 0x%x\n", (unsigned int) s.sig);
18 printf (">>> save context\n\n");
19 if (fosa_long_jump_save_context (&ctx)) {
20 printf ("fosa_long_jump_save_context");
24 printf (">>> check jump performed\n\n");
25 if (fosa_long_jump_was_performed ((const fosa_long_jump_context_t *) &ctx, &jmp)) {
26 printf ("fosa_long_jump_was_performed");
31 printf ("\t <<<< JUMPED\n\n");
32 pthread_sigmask (SIG_SETMASK, NULL, &s);
33 printf (">>> Current signal mask = 0x%x\n",(unsigned int) s.sig);
37 printf (">>> install handler\n\n");
38 if (fosa_long_jump_install_handler (&sig, &th)) {
39 printf ("fosa_long_jump_install_handler()");
43 printf ("\t signal=%d, thread=0x%x (self=0x%x)\n", sig, (unsigned int) th, (unsigned int) fosa_thread_self());
45 printf (">>> trigger a long jump using a signal\n\n");
46 ctx_info.sival_ptr = &ctx;
47 if (fosa_signal_queue (sig, ctx_info, th)) {
48 printf ("fosa_signal_queue");
59 sigaddset (&s, SIGRTMIN);
60 sigaddset (&s, SIGRTMAX);
61 pthread_sigmask (SIG_SETMASK, &s, NULL);