X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fstatd%2Fsvc_run.c;h=67bb05cccfed5a486f8e294a5f575a3c961b2b43;hp=8f6d9feb071b3d5b8d0eef427e54dc728c2c2b14;hb=c481a5416e5b937541205da23cde15cdabf106c1;hpb=8b7ad01b14df1e7529b9ba8a1ea17df0d6004ef9 diff --git a/utils/statd/svc_run.c b/utils/statd/svc_run.c index 8f6d9fe..67bb05c 100644 --- a/utils/statd/svc_run.c +++ b/utils/statd/svc_run.c @@ -47,8 +47,13 @@ * This is the RPC server side idle loop. * Wait for input, call server program. */ -#include "config.h" + +#ifdef HAVE_CONFIG_H +#include +#endif + #include +#include #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: