#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
*/
static int sigio_handler_active = 0;
# endif
-extern void input_handler (l_fp *);
/*
* SIGPOLL and SIGIO ROUTINES.
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*/
}
*/
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*/
}
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);
}
}
# 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*/
}
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*/
}
# 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*/
}
# endif /* USE_UDP_SIGPOLL */
}
-RETSIGTYPE
+static RETSIGTYPE
sigio_handler(
int sig
)
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--;
*/
# 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);
}
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);
}