From: brocalv Date: Tue, 4 Mar 2008 16:30:13 +0000 (+0000) Subject: FOSA-PaRTiKle: changes in allocated signals for longjumps X-Git-Url: https://rtime.felk.cvut.cz/gitweb/frescor/fosa.git/commitdiff_plain/8e48428c7b7f8da2232b573d203745cde182fb08 FOSA-PaRTiKle: changes in allocated signals for longjumps git-svn-id: http://www.frescor.org/private/svn/frescor/fosa/trunk@1037 35b4ef3e-fd22-0410-ab77-dab3279adceb --- diff --git a/include/fosa_opaque_types.h b/include/fosa_opaque_types.h index d6146c7..5d8c503 100644 --- a/include/fosa_opaque_types.h +++ b/include/fosa_opaque_types.h @@ -372,8 +372,10 @@ enum _fosa_clocks_e { }; 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 { diff --git a/src_partikle/fosa_clocks_and_timers.c b/src_partikle/fosa_clocks_and_timers.c index 99f795c..f028462 100644 --- a/src_partikle/fosa_clocks_and_timers.c +++ b/src_partikle/fosa_clocks_and_timers.c @@ -82,7 +82,6 @@ int fosa_thread_get_cputime_clock(fosa_thread_id_t tid, fosa_clock_id_t *clockid /************************* * 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, @@ -104,13 +103,16 @@ int fosa_timer_create 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); @@ -125,10 +127,6 @@ int fosa_timer_arm 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, diff --git a/src_partikle/fosa_long_jump.c b/src_partikle/fosa_long_jump.c index becd66d..3e502ce 100644 --- a/src_partikle/fosa_long_jump.c +++ b/src_partikle/fosa_long_jump.c @@ -72,7 +72,7 @@ enum { }; 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 @@ -109,9 +109,10 @@ int fosa_long_jump_was_performed 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);