temp_buffer[len+1] = 0;
}
+ if (type_configs[logtype].level >= log_debug)
+ goto log; /* bypass flooding checks */
+
/* Prevent flooding: hash the message and check if we got the same one recently */
int hash = hash_message(temp_buffer) + log_src_linenumber;
/* yes, log it and remove from array */
/* reusing log_details_buffer */
- sprintf(log_details_buffer, "message repeated %i times: ", LOG_FLOODING_MAXCOUNT - 1);
- iov[0].iov_base = log_details_buffer;
- iov[0].iov_len = strlen(log_details_buffer);
- iov[1].iov_base = temp_buffer;
- iov[1].iov_len = strlen(temp_buffer);
-
- /* Write "message repeated x times: ..." to log */
- writev( fd, iov, 2);
+ sprintf(log_details_buffer, "message repeated %i times\n",
+ LOG_FLOODING_MAXCOUNT - 1);
+ write(fd, log_details_buffer, strlen(log_details_buffer));
if ((i + 1) == LOG_FLOODING_ARRAY_SIZE) {
/* last array element, just decrement count */
/* array is full, discard oldest entry printing "message repeated..." if count > 1 */
if (log_flood_array[0].count >= LOG_FLOODING_MINCOUNT) {
/* reusing log_details_buffer */
- sprintf(log_details_buffer, "message %i lines before repeated %i times\n",
- LOG_FLOODING_ARRAY_SIZE , log_flood_array[0].count - 1);
- /* Write "message repeated x times: ..." to log */
+ sprintf(log_details_buffer, "message repeated %i times\n",
+ log_flood_array[0].count - LOG_FLOODING_MINCOUNT + 1);
write(fd, log_details_buffer, strlen(log_details_buffer));
}
for (int i = 1; i < LOG_FLOODING_ARRAY_SIZE; i++) {