From: Fredrik Tolf Date: Tue, 14 Oct 2014 22:14:38 +0000 (+0200) Subject: lib: Improved EAGAIN reporting friendliness further. X-Git-Url: http://git.dolda2000.com/gitweb/?a=commitdiff_plain;h=32bcaa06f65eba5d0d12cb99aa8c3982708b6f34;p=ashd.git lib: Improved EAGAIN reporting friendliness further. --- diff --git a/lib/cf.c b/lib/cf.c index 4135209..9d3fb76 100644 --- a/lib/cf.c +++ b/lib/cf.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #ifdef HAVE_CONFIG_H @@ -44,6 +45,7 @@ struct stdchild { char **envp; int fd; int agains; + time_t lastrep; }; static int parsefile(struct cfstate *s, FILE *in); @@ -399,8 +401,10 @@ static int stdhandle(struct child *ch, struct hthead *req, int fd, void (*chinit serr = errno; } if(serr == EAGAIN) { - if(sd->agains++ == 0) + if(sd->agains++ == 0) { flog(LOG_WARNING, "request to child %s denied due to buffer overload", ch->name); + sd->lastrep = time(NULL); + } } else { flog(LOG_ERR, "could not pass on request to child %s: %s", ch->name, strerror(serr)); close(sd->fd); @@ -409,7 +413,7 @@ static int stdhandle(struct child *ch, struct hthead *req, int fd, void (*chinit return(-1); } ok: - if(sd->agains > 0) { + if((sd->agains > 0) && ((time(NULL) - sd->lastrep) > 10)) { flog(LOG_WARNING, "%i requests to child %s were denied due to buffer overload", sd->agains, ch->name); sd->agains = 0; }