};
enum _fosa_signal_limits_e {
- FOSA_SIGNAL_MIN = SIGRTMIN,
- FOSA_SIGNAL_MAX = SIGRTMIN + 0,
+ 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 {
/*************************
* Timing: Timers
*************************/
-// #define FRSH_DEADLINE_NEWJOB_TIMEOUT 0x00050000
void void_handler (int signo) {};
int fosa_timer_create
(fosa_clock_id_t clockid, fosa_signal_t signal, fosa_signal_info_t info,
se.sigev_value.sival_ptr = info.sival_ptr;
return timer_create (clockid, &se, timerid);
-/*
- if ((info.sival_int & 0xFFFF0000) == FRSH_DEADLINE_NEWJOB_TIMEOUT)
- printf ("\n\ndeadline %d timer created: info=0x%x, signal=%d ()\n\n", *timerid, info.sival_int, signal);
-*/
}
+int fosa_timer_create_with_receiver
+ (fosa_clock_id_t clockid, fosa_signal_t signal, fosa_signal_info_t info,
+ fosa_timer_id_t *timerid, fosa_thread_id_t receiver)
+{
+ return fosa_timer_create (clockid, signal, info, timerid);
+}
+
int fosa_timer_delete(fosa_timer_id_t timerid)
{
return timer_delete (timerid);
clock_gettime (CLOCK_REALTIME, &now);
-/*
- printf ("(0x%x): Arm timer (%d). abstime=%d, value={%ld,%ld}, now={%ld, %ld}\n",\
- pthread_self (), timerid, abstime, value -> tv_sec, value -> tv_nsec, now.tv_sec, now.tv_nsec);
-*/
struct itimerspec tvalue =
{
.it_value = (struct timespec) *value,
};
int jmp_used_signals [LONGJMP_NSIG] = {[0 ... (LONGJMP_NSIG - 1)] = 0};
-pthread_mutex_t signal_pool_m = PTHREAD_MUTEX_INITIALIZER
+pthread_mutex_t signal_pool_m = PTHREAD_MUTEX_INITIALIZER;
int fosa_long_jump_save_context
void jmp_handler (int signo, siginfo_t *info, void *context)
{
fosa_long_jump_context_t *jmp_info = (fosa_long_jump_context_t *) info -> si_value.sival_ptr;
- sigset_t set;
#ifdef CONFIG_LONGJUMP_FREE_SIGNALS
+ sigset_t set;
+
// Restore the signal mask
pthread_sigmask (SIG_SETMASK, &(context -> jmp_sigmask), NULL);