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 printf (">>> save context\n\n");
16 if (fosa_long_jump_save_context (&ctx))
17 perror ("fosa_long_jump_save_context");
19 printf (">>> check jump performed\n\n");
20 if (fosa_long_jump_was_performed ((const fosa_long_jump_context_t *) &ctx, &jmp))
21 perror ("fosa_long_jump_was_performed");
24 printf ("\t <<<< JUMPED\n\n");
28 printf (">>> install handler\n\n");
29 if (fosa_long_jump_install_handler (&sig, &th))
30 perror ("fosa_long_jump_install_handler()");
32 printf ("\t signal=%d, thread=0x%x (self=0x%x)\n", sig, (unsigned int) th, (unsigned int) fosa_thread_self());
34 printf (">>> trigger a long jump using a signal\n\n");
35 ctx_info.sival_ptr = &ctx;
36 if (fosa_signal_queue (sig, ctx_info, th))
37 perror ("fosa_signal_queue");