From d876ad63e12c57aebc5e6d979db9fe57fe951c8a Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Tue, 29 Oct 1996 18:43:02 +0000 Subject: Fix the damn single-poll-loop bug. svn path=/trunk/; revision=420 --- fetchmail.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'fetchmail.c') diff --git a/fetchmail.c b/fetchmail.c index 7d9a71ca..c834db6a 100644 --- a/fetchmail.c +++ b/fetchmail.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #ifdef HAVE_GETHOSTBYNAME @@ -519,8 +520,27 @@ char **argv; time(&now); fprintf(stderr, "fetchmail: sleeping at %s", ctime(&now)); } - if (sleep(poll_interval)) - (void) fputs("fetchmail: awakened by SIGHUP\n", stderr); + + /* + * We can't use sleep(3) here, the alarm(2) call used to + * implement server nonresponse timeout collides with it. + * We'll just assume setitimer(2) is available since fetchmail + * has to have the socket layer to work at all. + */ + { + struct itimerval ntimeout; + + ntimeout.it_interval.tv_sec = ntimeout.it_interval.tv_sec = 0; + ntimeout.it_value.tv_sec = poll_interval; + ntimeout.it_value.tv_usec = 0; + + if (setitimer(ITIMER_REAL,&ntimeout,(struct itimerval *)NULL)==-1 + && errno == EINTR) + (void) fputs("fetchmail: awakened by SIGHUP\n", stderr); + signal(SIGALRM, donothing); + pause(); + } + if (outlevel == O_VERBOSE) { time_t now; -- cgit v1.2.3