]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/statd/svc_run.c
Define and use HIAVE_IFADDRS_H
[nfs-utils.git] / utils / statd / svc_run.c
index 8f6d9feb071b3d5b8d0eef427e54dc728c2c2b14..67bb05cccfed5a486f8e294a5f575a3c961b2b43 100644 (file)
  * This is the RPC server side idle loop.
  * Wait for input, call server program.
  */
-#include "config.h"
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <errno.h>
+#include <time.h>
 #include "statd.h"
 #include "notlist.h"
 
@@ -59,6 +64,7 @@ static int    svc_stop = 0;
  * requests are put.
  */
 notify_list *  notify = NULL;
+int    re_notify = 0;
 
 /*
  * Jump-off function.
@@ -85,6 +91,13 @@ my_svc_run(void)
        for (;;) {
                if (svc_stop)
                        return;
+               if (re_notify) {
+                       change_state();
+                       dprintf(N_DEBUG, "Notifying...(new state %d)",
+                                                               MY_STATE);
+                       notify_hosts();
+                       re_notify = 0;
+               }
 
                /* Ah, there are some notifications to be processed */
                while (notify && NL_WHEN(notify) <= time(&now)) {
@@ -97,12 +110,14 @@ my_svc_run(void)
 
                        tv.tv_sec  = NL_WHEN(notify) - now;
                        tv.tv_usec = 0;
-                       dprintf(L_DEBUG, "Waiting for reply... (timeo %d)",
+                       dprintf(N_DEBUG, "Waiting for reply... (timeo %d)",
                                                        tv.tv_sec);
                        selret = select(FD_SETSIZE, &readfds,
                                (void *) 0, (void *) 0, &tv);
-               } else {
-                       dprintf(L_DEBUG, "Waiting for client connections.");
+               } else if (run_mode & MODE_NOTIFY_ONLY)
+                       return;
+               else {
+                       dprintf(N_DEBUG, "Waiting for client connections.");
                        selret = select(FD_SETSIZE, &readfds,
                                (void *) 0, (void *) 0, (struct timeval *) 0);
                }
@@ -112,7 +127,8 @@ my_svc_run(void)
                        if (errno == EINTR || errno == ECONNREFUSED
                         || errno == ENETUNREACH || errno == EHOSTUNREACH)
                                continue;
-                       log(L_ERROR, "my_svc_run() - select: %m");
+                       note(N_ERROR, "my_svc_run() - select: %s",
+                               strerror (errno));
                        return;
 
                case 0: