|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|