svn commit: r315644 - head/usr.sbin/inetd
Hiroki Sato
hrs at FreeBSD.org
Mon Mar 20 17:57:26 UTC 2017
Author: hrs
Date: Mon Mar 20 17:57:24 2017
New Revision: 315644
URL: https://svnweb.freebsd.org/changeset/base/315644
Log:
Simplify a pipe for signal handling.
Modified:
head/usr.sbin/inetd/inetd.c
Modified: head/usr.sbin/inetd/inetd.c
==============================================================================
--- head/usr.sbin/inetd/inetd.c Mon Mar 20 17:46:33 2017 (r315643)
+++ head/usr.sbin/inetd/inetd.c Mon Mar 20 17:57:24 2017 (r315644)
@@ -214,7 +214,6 @@ __FBSDID("$FreeBSD$");
#endif
static void close_sep(struct servtab *);
static void flag_signal(int);
-static void flag_config(int);
static void config(void);
static int cpmip(const struct servtab *, int);
static void endconfig(void);
@@ -224,11 +223,9 @@ static struct servtab *getconfigent(void
static int matchservent(const char *, const char *, const char *);
static char *nextline(FILE *);
static void addchild(struct servtab *, int);
-static void flag_reapchild(int);
static void reapchild(void);
static void enable(struct servtab *);
static void disable(struct servtab *);
-static void flag_retry(int);
static void retry(void);
static int setconfig(void);
static void setup(struct servtab *);
@@ -532,17 +529,17 @@ main(int argc, char **argv)
}
#endif
- sa.sa_flags = 0;
+ sa = (struct sigaction){
+ .sa_flags = 0,
+ .sa_handler = flag_signal,
+ };
sigemptyset(&sa.sa_mask);
sigaddset(&sa.sa_mask, SIGALRM);
sigaddset(&sa.sa_mask, SIGCHLD);
sigaddset(&sa.sa_mask, SIGHUP);
- sa.sa_handler = flag_retry;
sigaction(SIGALRM, &sa, &saalrm);
config();
- sa.sa_handler = flag_config;
sigaction(SIGHUP, &sa, &sahup);
- sa.sa_handler = flag_reapchild;
sigaction(SIGCHLD, &sa, &sachld);
sa.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &sa, &sapipe);
@@ -591,30 +588,34 @@ main(int argc, char **argv)
}
/* handle any queued signal flags */
if (FD_ISSET(signalpipe[0], &readable)) {
- int nsig;
+ int nsig, signo;
+
if (ioctl(signalpipe[0], FIONREAD, &nsig) != 0) {
- syslog(LOG_ERR, "ioctl: %m");
- exit(EX_OSERR);
+ syslog(LOG_ERR, "ioctl: %m");
+ exit(EX_OSERR);
}
+ nsig /= sizeof(signo);
while (--nsig >= 0) {
- char c;
- if (read(signalpipe[0], &c, 1) != 1) {
- syslog(LOG_ERR, "read: %m");
- exit(EX_OSERR);
- }
- if (debug)
- warnx("handling signal flag %c", c);
- switch(c) {
- case 'A': /* sigalrm */
- retry();
- break;
- case 'C': /* sigchld */
- reapchild();
- break;
- case 'H': /* sighup */
- config();
- break;
- }
+ size_t len;
+
+ len = read(signalpipe[0], &signo, sizeof(signo));
+ if (len != sizeof(signo)) {
+ syslog(LOG_ERR, "read: %m");
+ exit(EX_OSERR);
+ }
+ if (debug)
+ warnx("handling signal flag %d", signo);
+ switch (signo) {
+ case SIGALRM:
+ retry();
+ break;
+ case SIGCHLD:
+ reapchild();
+ break;
+ case SIGHUP:
+ config();
+ break;
+ }
}
}
for (sep = servtab; n && sep; sep = sep->se_next)
@@ -900,11 +901,12 @@ main(int argc, char **argv)
*/
static void
-flag_signal(int c)
+flag_signal(int signo)
{
- char ch = c;
+ size_t len;
- if (write(signalpipe[1], &ch, 1) != 1) {
+ len = write(signalpipe[1], &signo, sizeof(signo));
+ if (len != sizeof(signo)) {
syslog(LOG_ERR, "write: %m");
_exit(EX_OSERR);
}
@@ -932,16 +934,6 @@ addchild(struct servtab *sep, pid_t pid)
disable(sep);
}
-/*
- * Some child process has exited. See if it's on somebody's list.
- */
-
-static void
-flag_reapchild(int signo __unused)
-{
- flag_signal('C');
-}
-
static void
reapchild(void)
{
@@ -981,12 +973,6 @@ reapchild(void)
}
static void
-flag_config(int signo __unused)
-{
- flag_signal('H');
-}
-
-static void
config(void)
{
struct servtab *sep, *new, **sepp;
@@ -1250,12 +1236,6 @@ unregisterrpc(struct servtab *sep)
}
static void
-flag_retry(int signo __unused)
-{
- flag_signal('A');
-}
-
-static void
retry(void)
{
struct servtab *sep;
More information about the svn-src-all
mailing list