--- libaitsched/src/hooks.c 2014/01/28 10:08:18 1.24.4.4 +++ libaitsched/src/hooks.c 2014/01/28 10:37:19 1.24.4.5 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: hooks.c,v 1.24.4.4 2014/01/28 10:08:18 misho Exp $ +* $Id: hooks.c,v 1.24.4.5 2014/01/28 10:37:19 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -529,6 +529,13 @@ sched_hook_proc(void *task, void *arg __unused) return NULL; } +#ifdef KQ_DISABLE +static void +_sched_sigHandler(int sig) +{ +} +#endif /* KQ_DISABLE */ + /* * sched_hook_signal() - Default SIGNAL hook * @@ -539,8 +546,8 @@ sched_hook_proc(void *task, void *arg __unused) void * sched_hook_signal(void *task, void *arg __unused) { -#ifndef KQ_DISABLE sched_task_t *t = task; +#ifndef KQ_DISABLE struct kevent chg[1]; struct timespec timeout = { 0, 0 }; @@ -562,7 +569,21 @@ sched_hook_signal(void *task, void *arg __unused) LOGERR; return (void*) -1; } +#else + struct sigaction sa; + memset(&sa, 0, sizeof sa); + sigemptyset(&sa.sa_mask); + sa.sa_handler = _sched_sigHandler; + sa.sa_flags = SA_RESETHAND | SA_RESTART; + + if (sigaction(TASK_VAL(t), &sa, NULL) == -1) { + if (TASK_ROOT(t)->root_hooks.hook_exec.exception) + TASK_ROOT(t)->root_hooks.hook_exec.exception(TASK_ROOT(t), NULL); + else + LOGERR; + return (void*) -1; + } #endif return NULL; }