From a9161ec7d5d706d923a3cbf48608e6d6415e770c Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Thu, 17 Jan 2013 10:48:45 +0100 Subject: [PATCH] src/utils_complain.[ch]: Fix the complaint mechanism after the sub-second change. --- src/utils_complain.c | 22 ++++++++++------------ src/utils_complain.h | 25 ++++++++++++++----------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/utils_complain.c b/src/utils_complain.c index 9074b183..fdac50ff 100644 --- a/src/utils_complain.c +++ b/src/utils_complain.c @@ -1,6 +1,6 @@ /** * collectd - src/utils_complain.c - * Copyright (C) 2006-2007 Florian octo Forster + * Copyright (C) 2006-2013 Florian octo Forster * Copyright (C) 2008 Sebastian tokkee Harl * * This program is free software; you can redistribute it and/or modify it @@ -29,10 +29,10 @@ static int vcomplain (int level, c_complain_t *c, const char *format, va_list ap) { - time_t now; + cdtime_t now; char message[512]; - now = time (NULL); + now = cdtime (); if (c->last + c->interval > now) return 0; @@ -44,8 +44,8 @@ static int vcomplain (int level, c_complain_t *c, else c->interval *= 2; - if (c->interval > 86400) - c->interval = 86400; + if (c->interval > TIME_T_TO_CDTIME_T (86400)) + c->interval = TIME_T_TO_CDTIME_T (86400); vsnprintf (message, sizeof (message), format, ap); message[sizeof (message) - 1] = '\0'; @@ -58,12 +58,9 @@ void c_complain (int level, c_complain_t *c, const char *format, ...) { va_list ap; - /* reset the old interval */ - if (c->interval < 0) - c->interval *= -1; - va_start (ap, format); - vcomplain (level, c, format, ap); + if (vcomplain (level, c, format, ap)) + c->complained_once = 1; va_end (ap); } /* c_complain */ @@ -71,12 +68,12 @@ void c_complain_once (int level, c_complain_t *c, const char *format, ...) { va_list ap; - if (c->interval < 0) + if (c->complained_once) return; va_start (ap, format); if (vcomplain (level, c, format, ap)) - c->interval *= -1; + c->complained_once = 1; va_end (ap); } /* c_complain_once */ @@ -89,6 +86,7 @@ void c_do_release (int level, c_complain_t *c, const char *format, ...) return; c->interval = 0; + c->complained_once = 0; va_start (ap, format); vsnprintf (message, sizeof (message), format, ap); diff --git a/src/utils_complain.h b/src/utils_complain.h index 09c43750..028dda6f 100644 --- a/src/utils_complain.h +++ b/src/utils_complain.h @@ -1,6 +1,6 @@ /** * collectd - src/utils_complain.h - * Copyright (C) 2006-2007 Florian octo Forster + * Copyright (C) 2006-2013 Florian octo Forster * Copyright (C) 2008 Sebastian tokkee Harl * * This program is free software; you can redistribute it and/or modify it @@ -24,23 +24,26 @@ #ifndef UTILS_COMPLAIN_H #define UTILS_COMPLAIN_H 1 -#include +#include "utils_time.h" typedef struct { /* time of the last report */ - time_t last; + cdtime_t last; - /* how long to wait until reporting again - * 0 indicates that the complaint is no longer valid - * < 0 indicates that the complaint has been reported once - * => c_complain_once will not report again - * => c_complain uses the absolute value to reset the old value */ - int interval; + /* How long to wait until reporting again. + * 0 indicates that the complaint is no longer valid. */ + cdtime_t interval; + + _Bool complained_once; } c_complain_t; -#define C_COMPLAIN_INIT_STATIC { 0, 0 } -#define C_COMPLAIN_INIT(c) do { (c)->last = 0; (c)->interval = 0; } while (0) +#define C_COMPLAIN_INIT_STATIC { 0, 0, 0 } +#define C_COMPLAIN_INIT(c) do { \ + (c)->last = 0; \ + (c)->interval = 0; \ + (c)->complained_once = 0; \ +} while (0) /* * NAME -- 2.30.2