diff --git a/lib/loglib.c b/lib/loglib.c index 1b181bdd1..a2febb137 100644 --- a/lib/loglib.c +++ b/lib/loglib.c @@ -15,6 +15,7 @@ struct log_limiter_entry { char *prefix; char *msg; + time_t when; }; typedef struct _fac_code { @@ -159,7 +160,6 @@ void __vpilog(int prio, const char *prefix, const char *fmt, va_list ap) { len--; if ((prio & LOG_FLAG_LIMIT)) { - time_t when; struct log_limiter_entry lle, *llep; lle.prefix = (char *) prefix; @@ -174,18 +174,18 @@ void __vpilog(int prio, const char *prefix, const char *fmt, va_list ap) { time_t now = time(NULL); - when = (time_t) GPOINTER_TO_UINT(g_hash_table_lookup(__log_limiter, &lle)); - if (!when || (now - when) >= 15) { + llep = g_hash_table_lookup(__log_limiter, &lle); + if (!llep || (now - llep->when) >= 15) { llep = g_slice_alloc0(sizeof(*llep)); llep->prefix = strdup(prefix); llep->msg = strdup(msg); - g_hash_table_insert(__log_limiter, llep, GUINT_TO_POINTER(now)); + llep->when = now; + g_hash_table_insert(__log_limiter, llep, llep); __log_limiter_count++; - when = 0; + llep = NULL; } - - if (when) + if (llep) return; }