]> rtime.felk.cvut.cz Git - frescor/fosa.git/blobdiff - src_partikle/tests/test_long_jump.c
FOSA-PaRTiKle: fixes in long jumps
[frescor/fosa.git] / src_partikle / tests / test_long_jump.c
index e4bba651f1f8620b09b63d928d4e4b9269f63e52..b9b12d440644c161d8007070ea76d7adf0f70613 100644 (file)
@@ -10,38 +10,57 @@ void f1 (void)
        fosa_thread_id_t th;
        int jmp;
        fosa_signal_info_t ctx_info;
+       sigset_t s;
        
+       pthread_sigmask (SIG_SETMASK, NULL, &s);
+       printf (">>> Current signal mask = 0x%x\n", (unsigned int) s.sig);
        
        printf (">>> save context\n\n");
-       if (fosa_long_jump_save_context (&ctx))
-               perror ("fosa_long_jump_save_context");
+       if (fosa_long_jump_save_context (&ctx)) {
+               printf ("fosa_long_jump_save_context");
+               exit (-1);
+       }
        
        printf (">>> check jump performed\n\n");
-       if (fosa_long_jump_was_performed ((const fosa_long_jump_context_t *) &ctx, &jmp))
-               perror ("fosa_long_jump_was_performed");
+       if (fosa_long_jump_was_performed ((const fosa_long_jump_context_t *) &ctx, &jmp)) {
+               printf ("fosa_long_jump_was_performed");
+               exit (-2);
+       }
        
        if (jmp) {
                printf ("\t <<<< JUMPED\n\n");
+               pthread_sigmask (SIG_SETMASK, NULL, &s);
+               printf (">>> Current signal mask = 0x%x\n",(unsigned int) s.sig);
                exit (10);
        }
-
+       
        printf (">>> install handler\n\n");
-       if (fosa_long_jump_install_handler (&sig, &th))
-               perror ("fosa_long_jump_install_handler()");
-               
+       if (fosa_long_jump_install_handler (&sig, &th)) {
+               printf ("fosa_long_jump_install_handler()");
+               exit (-3);
+       }
+       
        printf ("\t signal=%d, thread=0x%x (self=0x%x)\n",  sig, (unsigned int) th, (unsigned int) fosa_thread_self());
        
        printf (">>> trigger a long jump using a signal\n\n");
        ctx_info.sival_ptr = &ctx;
-       if (fosa_signal_queue (sig, ctx_info, th))
-               perror ("fosa_signal_queue");
-       
+       if (fosa_signal_queue (sig, ctx_info, th)) {
+               printf ("fosa_signal_queue");
+               exit (-4);
+       }
 }
 
 
 int main (void)
 {
-       f1 ();
-       return 0;
+  sigset_t s;
+
+  sigemptyset (&s);
+  sigaddset (&s, SIGRTMIN);
+  sigaddset (&s, SIGRTMAX);
+  pthread_sigmask (SIG_SETMASK, &s, NULL);
+
+  f1 ();
+  return 0;
 }