/* to determine the CPU capabilities with possible */
/* unknown instructions */
tvhwarn(LS_CPU, "Illegal instruction handler (might be OK)");
- signal(SIGILL, handle_sigill);
+ tvh_signal(SIGILL, handle_sigill);
}
void
tvh_cond_signal(>imer_cond, 0);
tvh_cond_signal(&mtimer_cond, 0);
atomic_set(&tvheadend_running, 0);
- signal(x, doexit);
+ tvh_signal(x, doexit);
}
static int
tvhlog_set_trace(log_trace);
tvhinfo(LS_MAIN, "Log started");
- signal(SIGPIPE, handle_sigpipe); // will be redundant later
- signal(SIGILL, handle_sigill); // see handler..
+ tvh_signal(SIGPIPE, handle_sigpipe); // will be redundant later
+ tvh_signal(SIGILL, handle_sigill); // see handler..
/* Set privileges */
if((opt_fork && getuid() == 0) || opt_group || opt_user) {
sigaddset(&set, SIGTERM);
sigaddset(&set, SIGINT);
- signal(SIGTERM, doexit);
- signal(SIGINT, doexit);
+ tvh_signal(SIGTERM, doexit);
+ tvh_signal(SIGINT, doexit);
pthread_sigmask(SIG_UNBLOCK, &set, NULL);
sigaddset(&set, SIGQUIT);
pthread_sigmask(SIG_UNBLOCK, &set, NULL);
- signal(SIGTERM, doexit);
- signal(SIGQUIT, doquit);
+ tvh_signal(SIGTERM, doexit);
+ tvh_signal(SIGQUIT, doquit);
/* Run */
tvhtrace(LS_THREAD, "created thread %ld [%s / %p(%p)]",
return r;
}
+int tvh_signal(int signal, void (*handler) (int))
+{
+ struct sigaction action;
+ memset(&action, 0, sizeof(action));
+ action.sa_handler = handler;
+ return sigaction(signal, &action, NULL);
+}
+
void
tvh_mutex_not_held(const char *file, int line)
{
int tvh_cond_timedwait(tvh_cond_t *cond, tvh_mutex_t *mutex, int64_t clock);
int tvh_cond_timedwait_ts(tvh_cond_t *cond, tvh_mutex_t *mutex, struct timespec *ts);
+int tvh_signal(int signal, void (*handler) (int));
+
#ifndef TVH_THREAD_C
#define pthread_cond __do_not_use_pthread_cond
#define pthread_cond_t __do_not_use_pthread_cond_t