]> rtime.felk.cvut.cz Git - frescor/fosa.git/blobdiff - include/fosa_opaque_types.h
FOSA-PaRTiKle: fixes in long jumps
[frescor/fosa.git] / include / fosa_opaque_types.h
index bf2ee76cb093b28bb7ef62a8c401837e3d85a795..8f47e5f18a77e772571da9123ae1cdf8c624047f 100644 (file)
@@ -333,6 +333,7 @@ typedef pthread_mutex_t FOSA_MUTEX_T_OPAQUE;
 #include <sched.h>
 #include <stdlib.h>
 #include <setjmp.h>
+#include <limits.h>
 
 typedef struct {
     posix_appsched_actions_t actions;
@@ -343,11 +344,7 @@ typedef struct {
     bool activated;
 } FOSA_ADS_ACTIONS_T_OPAQUE;
 
-typedef struct {
-  jmp_buf jmp_context;
-  bool jmp_hasexecuted;
-  sigset_t jmp_sigmask;
-} FOSA_LONG_JUMP_CONTEXT_T_OPAQUE;
+typedef unsigned long FOSA_LONG_JUMP_CONTEXT_T_OPAQUE [32];
 
 typedef pthread_t                   FOSA_THREAD_ID_T_OPAQUE;
 typedef pthread_attr_t              FOSA_THREAD_ATTR_T_OPAQUE;
@@ -363,13 +360,19 @@ enum _fosa_clocks_e {
   FOSA_SYSTEM_CLOCK_OPAQUE = CLOCK_MONOTONIC
 };
 
+#define LONGJMP_NSIG 3
+
+#if LONGJMP_NSIG > (RTSIG_MAX - 1)
+#   error LONGJMP_NSIG too big (LONGJMP_NSIG > RTSIG_MAX - 1)
+#endif
+
 enum _fosa_signal_limits_e {
-  LONGJMP_NSIG = 3,
   LONGJMP_FIRSTSIG = SIGRTMAX - LONGJMP_NSIG + 1,
   FOSA_SIGNAL_MAX = LONGJMP_FIRSTSIG - 1,
   FOSA_SIGNAL_MIN = FOSA_SIGNAL_MAX,
 };
 
+
 enum _fosa_errors_e {
   FOSA_EINVAL = EINVAL,
   FOSA_EAGAIN = EAGAIN,