]> rtime.felk.cvut.cz Git - frescor/fosa.git/blobdiff - src_aquosa/fosa_long_jump.c
Allow for mutexes and condvars to be shared among different processes.
[frescor/fosa.git] / src_aquosa / fosa_long_jump.c
index 829e2c7a5aeed5023322a03d4047025f3b8a94c0..30e350e96d949fb166e67766ac7037d1f8826848 100644 (file)
@@ -132,7 +132,7 @@ int fosa_long_jump_save_context(fosa_long_jump_context_t *context)
 int fosa_long_jump_was_performed(const fosa_long_jump_context_t *context,
                                 int *jumped)
 {
-       return ENOSYS;
+       return FOSA_EINVAL;
 }
 
 /** 
@@ -140,7 +140,8 @@ int fosa_long_jump_was_performed(const fosa_long_jump_context_t *context,
  **/
 void __long_jump_handler(int n, siginfo_t *info, void *c)
 {
-       fosa_long_jump_context_t *context = (fosa_long_jump_context_t*)info->si_ptr;
+       fosa_long_jump_context_t *context =
+               (fosa_long_jump_context_t*) info->si_ptr;
 
        siglongjmp(*context, 1);
 }
@@ -190,6 +191,7 @@ void __long_jump_handler(int n, siginfo_t *info, void *c)
 int fosa_long_jump_install_handler(fosa_signal_t *signal,
                                   fosa_thread_id_t *handler)
 {
+       int ret;
        struct sigaction sa_long_jump;
 
        sa_long_jump.sa_handler = NULL;
@@ -199,6 +201,8 @@ int fosa_long_jump_install_handler(fosa_signal_t *signal,
 
        handler = NULL;
 
-       return sigaction(*signal, &sa_long_jump, NULL);
+       ret = sigaction(*signal, &sa_long_jump, NULL);
+
+       return ret ? errno : 0;
 }