static sigset_t signals_to_block;
+/*
+ * The fallback timer protects us from occasions when CLOCK_REALTIME
+ * goes backwards so our nice absolute clock_nanosleep() end up
+ * sleeping far too long.
+ */
+static timer_t fallback_timer;
+
static void
dummy_out(bool state)
{
init(int argc, char **argv)
{
struct timespec ts;
+ struct sigevent sev;
int opt;
tzset();
sigemptyset(&signals_to_block);
sigaddset(&signals_to_block, SIGINT);
sigaddset(&signals_to_block, SIGTERM);
+ sev.sigev_notify = SIGEV_SIGNAL;
+ sev.sigev_signo = SIGALRM;
+ if (timer_create(CLOCK_MONOTONIC, &sev, &fallback_timer) != 0)
+ err(1, "timer_create");
if (clock_gettime(CLOCK_REALTIME, &ts) != 0)
err (1, "clock_gettime");
if (localtime_r(&ts.tv_sec, &displayed) == NULL)