summaryrefslogtreecommitdiffstats
path: root/contrib/ntp/libntp/iosignal.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ntp/libntp/iosignal.c')
-rw-r--r--contrib/ntp/libntp/iosignal.c75
1 files changed, 32 insertions, 43 deletions
diff --git a/contrib/ntp/libntp/iosignal.c b/contrib/ntp/libntp/iosignal.c
index 19a6e96..8749a23 100644
--- a/contrib/ntp/libntp/iosignal.c
+++ b/contrib/ntp/libntp/iosignal.c
@@ -45,7 +45,14 @@
#include "iosignal.h"
#if defined(HAVE_SIGNALED_IO)
+static RETSIGTYPE sigio_handler (int);
+
+/* consistency safegurad to catch BLOCK/UNBLOCK oversights */
static int sigio_block_count = 0;
+
+/* main inputhandler to be called on SIGIO */
+static input_handler_t *input_handler_callback = NULL;
+
# if defined(HAVE_SIGACTION)
/*
* If sigaction() is used for signal handling and a signal is
@@ -59,40 +66,11 @@ static int sigio_block_count = 0;
*/
static int sigio_handler_active = 0;
# endif
-extern void input_handler P((l_fp *));
/*
* SIGPOLL and SIGIO ROUTINES.
*/
- /*
- * Some systems (MOST) define SIGPOLL == SIGIO, others SIGIO == SIGPOLL, and
- * a few have separate SIGIO and SIGPOLL signals. This code checks for the
- * SIGIO == SIGPOLL case at compile time.
- * Do not define USE_SIGPOLL or USE_SIGIO.
- * these are interal only to iosignal.c!
- */
-# if defined(USE_SIGPOLL)
-# undef USE_SIGPOLL
-# endif
-# if defined(USE_SIGIO)
-# undef USE_SIGIO
-# endif
-
-# if defined(USE_TTY_SIGPOLL) || defined(USE_UDP_SIGPOLL)
-# define USE_SIGPOLL
-# endif
-
-# if !defined(USE_TTY_SIGPOLL) || !defined(USE_UDP_SIGPOLL)
-# define USE_SIGIO
-# endif
-
-# if defined(USE_SIGIO) && defined(USE_SIGPOLL)
-# if SIGIO == SIGPOLL
-# define USE_SIGIO
-# undef USE_SIGPOLL
-# endif /* SIGIO == SIGPOLL */
-# endif /* USE_SIGIO && USE_SIGIO */
/*
@@ -128,7 +106,7 @@ init_clock_sig(
pgrp = getpid();
if (ioctl(rio->fd, FIOSSAIOOWN, (char *)&pgrp) == -1)
{
- msyslog(LOG_ERR, "ioctl(FIOSSAIOOWN) fails for clock I/O: %m");
+ msyslog(LOG_ERR, "ioctl(FIOSSAIOOWN) fails for clock I/O: %m - EXITING");
exit(1);
/*NOTREACHED*/
}
@@ -138,14 +116,14 @@ init_clock_sig(
*/
if (ioctl(rio->fd, FIOSNBIO, (char *)&on) == -1)
{
- msyslog(LOG_ERR, "ioctl(FIOSNBIO) fails for clock I/O: %m");
+ msyslog(LOG_ERR, "ioctl(FIOSNBIO) fails for clock I/O: %m - EXITING");
exit(1);
/*NOTREACHED*/
}
if (ioctl(rio->fd, FIOSSAIOSTAT, (char *)&on) == -1)
{
- msyslog(LOG_ERR, "ioctl(FIOSSAIOSTAT) fails for clock I/O: %m");
+ msyslog(LOG_ERR, "ioctl(FIOSSAIOSTAT) fails for clock I/O: %m - EXITING");
exit(1);
/*NOTREACHED*/
}
@@ -232,7 +210,7 @@ init_socket_sig(
if (ioctl(fd, I_SETSIG, S_INPUT) < 0)
{
msyslog(LOG_ERR,
- "init_socket_sig: ioctl(I_SETSIG, S_INPUT) failed: %m");
+ "init_socket_sig: ioctl(I_SETSIG, S_INPUT) failed: %m - EXITING");
exit(1);
}
}
@@ -246,7 +224,7 @@ init_socket_sig(
# if defined(FIOASYNC)
if (ioctl(fd, FIOASYNC, (char *)&on) == -1)
{
- msyslog(LOG_ERR, "ioctl(FIOASYNC) fails: %m");
+ msyslog(LOG_ERR, "ioctl(FIOASYNC) fails: %m - EXITING");
exit(1);
/*NOTREACHED*/
}
@@ -256,13 +234,13 @@ init_socket_sig(
if ((flags = fcntl(fd, F_GETFL, 0)) == -1)
{
- msyslog(LOG_ERR, "fcntl(F_GETFL) fails: %m");
+ msyslog(LOG_ERR, "fcntl(F_GETFL) fails: %m - EXITING");
exit(1);
/*NOTREACHED*/
}
if (fcntl(fd, F_SETFL, flags|FASYNC) < 0)
{
- msyslog(LOG_ERR, "fcntl(...|FASYNC) fails: %m");
+ msyslog(LOG_ERR, "fcntl(...|FASYNC) fails: %m - EXITING");
exit(1);
/*NOTREACHED*/
}
@@ -280,21 +258,21 @@ init_socket_sig(
# if defined(SIOCSPGRP)
if (ioctl(fd, SIOCSPGRP, (char *)&pgrp) == -1)
{
- msyslog(LOG_ERR, "ioctl(SIOCSPGRP) fails: %m");
+ msyslog(LOG_ERR, "ioctl(SIOCSPGRP) fails: %m - EXITING");
exit(1);
/*NOTREACHED*/
}
# elif defined(FIOSETOWN)
if (ioctl(fd, FIOSETOWN, (char*)&pgrp) == -1)
{
- msyslog(LOG_ERR, "ioctl(FIOSETOWN) fails: %m");
+ msyslog(LOG_ERR, "ioctl(FIOSETOWN) fails: %m - EXITING");
exit(1);
/*NOTREACHED*/
}
# elif defined(F_SETOWN)
if (fcntl(fd, F_SETOWN, pgrp) == -1)
{
- msyslog(LOG_ERR, "fcntl(F_SETOWN) fails: %m");
+ msyslog(LOG_ERR, "fcntl(F_SETOWN) fails: %m - EXITING");
exit(1);
/*NOTREACHED*/
}
@@ -305,7 +283,7 @@ init_socket_sig(
# endif /* USE_UDP_SIGPOLL */
}
-RETSIGTYPE
+static RETSIGTYPE
sigio_handler(
int sig
)
@@ -321,7 +299,8 @@ sigio_handler(
msyslog(LOG_ERR, "sigio_handler: sigio_handler_active != 1");
# endif
- (void)input_handler(&ts);
+ INSIST(input_handler_callback != NULL);
+ (*input_handler_callback)(&ts);
# if defined(HAVE_SIGACTION)
sigio_handler_active--;
@@ -337,8 +316,13 @@ sigio_handler(
*/
# ifdef HAVE_SIGACTION
void
-set_signal(void)
+set_signal(input_handler_t *input)
{
+ INSIST(input != NULL);
+
+ input_handler_callback = input;
+
+ using_sigio = TRUE;
# ifdef USE_SIGIO
(void) signal_no_reset(SIGIO, sigio_handler);
# endif
@@ -507,8 +491,13 @@ block_sigio(void)
}
void
-set_signal(void)
+set_signal(input_handler_t *input)
{
+ INSIST(input != NULL);
+
+ input_handler_callback = input;
+
+ using_sigio = TRUE;
(void) signal_no_reset(SIGIO, sigio_handler);
}
OpenPOWER on IntegriCloud