]> Zhao Yanbai Git Server - minix.git/commitdiff
ftpd(8): drop some MINIX-specific changes 74/3474/1
authorDavid van Moolenbroek <david@minix3.org>
Sun, 5 Mar 2017 16:13:32 +0000 (16:13 +0000)
committerDavid van Moolenbroek <david@minix3.org>
Tue, 21 Mar 2017 22:00:34 +0000 (22:00 +0000)
Also put in a crude way to clean up zombies when ftpd(8) is running
in daemon mode, because we do not yet support SA_NOCLDWAIT.

Change-Id: I8a7db1d665c432d736db833b0022d0340764db1f

libexec/ftpd/ftpd.c

index cdcde54b56acf2e303277d87161172ec49b1cf9c..3c7aa9df3ae4961e70a5f656aef388939f1618ef 100644 (file)
@@ -575,6 +575,15 @@ main(int argc, char *argv[])
                        syslog(LOG_ERR, "failed to write a pid file: %m");
 
                for (;;) {
+#ifdef __minix
+                       /*
+                        * MINIX 3 does not yet support SA_NOCLDWAIT.  Cleaning
+                        * up zombies this way is not perfect, but at least it
+                        * prevents accumulation of zombies over time.
+                        */
+                       while (waitpid(-1, NULL, WNOHANG) > 0)
+                               ;
+#endif /* __minix */
                        if (poll(fds, n, INFTIM) == -1) {
                                if (errno == EINTR)
                                        continue;
@@ -708,7 +717,6 @@ main(int argc, char *argv[])
        sa.sa_handler = toolong;
        (void) sigaction(SIGALRM, &sa, NULL);
        sa.sa_handler = sigurg;
-#if !defined(__minix)
        (void) sigaction(SIGURG, &sa, NULL);
 
        /* Try to handle urgent data inline */
@@ -723,7 +731,6 @@ main(int argc, char *argv[])
            sizeof(int)) < 0)
                syslog(LOG_WARNING, "setsockopt (SO_KEEPALIVE): %m");
 #endif
-#endif /* !defined(__minix) */
 
 #ifdef F_SETOWN
        if (fcntl(fileno(stdin), F_SETOWN, getpid()) == -1)
@@ -2012,7 +2019,6 @@ dataconn(const char *name, off_t size, const char *fmode)
                }
                (void) close(pdata);
                pdata = s;
-#if !defined(__minix)
                switch (from.su_family) {
                case AF_INET:
 #ifdef IP_TOS
@@ -2024,7 +2030,6 @@ dataconn(const char *name, off_t size, const char *fmode)
                        break;
 #endif
                }
-#endif /* !defined(__minix) */
                /* Set keepalives on the socket to detect dropped conns. */
 #ifdef SO_KEEPALIVE
                keepalive = 1;