[syslog-ng] Memory leak can occur with supressed duplicate log messages
Balazs Scheidler
bazsi at balabit.hu
Wed Jun 30 17:42:36 CEST 2010
On Mon, 2010-06-28 at 12:30 +1200, andy kitchingman wrote:
> Hi
>
>
> Due to my company firewall, I do not have access to the git public
> repository, so I will post this here.
>
>
> I believe there is a memory leak when duplicate messages are
> suppressed and messages cannot be consumed:
>
>
> logwriter.c: log_writer_last_msg_flush(LogWriter *self)
>
> -------------------------------------------
>
>
> log_queue_push_tail(self->queue, m, &path_options) can return FALSE
> (message cannot be consumed), in which case the local LogMessage m is
> leaked.
>
>
> The fix should be something like
>
>
> if (!log_queue_push_tail(self->queue, m, &path_options))
>
> {
>
> log_msg_unref(m);
>
> }
>
Thanks for the report, but this patch breaks flow control. Seemingly
better fix for the problem is:
diff --git a/src/logwriter.c b/src/logwriter.c
index dcc9584..86d1e07 100644
--- a/src/logwriter.c
+++ b/src/logwriter.c
@@ -356,7 +356,15 @@ log_writer_last_msg_flush(LogWriter *self)
path_options.flow_control = FALSE;
- log_queue_push_tail(self->queue, m, &path_options);
+ if (!log_queue_push_tail(self->queue, m, &path_options))
+ {
+ stats_counter_inc(self->dropped_messages);
+ msg_debug("Destination queue full, dropping suppressed message",
+ evt_tag_int("queue_len", log_queue_get_length(self->queue)),
+ evt_tag_int("mem_fifo_size", self->options->mem_fifo_size),
+ NULL);
+ log_msg_drop(m, &path_options);
+ }
log_writer_last_msg_release(self);
}
I've also commited this to syslog-ng OSE 3.0 tree, it'll be forward ported over
time to newer versions as well. Here's the git commit entry:
commit 9c2c2be8b95add3789a91cec25ea92a3bd6ceedb
Author: Balazs Scheidler <bazsi at balabit.hu>
Date: Wed Jun 30 17:41:06 2010 +0200
logwriter: fix memory leak if the suppressed message doesn't fit into the queue
In case a suppressed message couldn't be inserted into the destination FIFO,
it was leaked. This patch correctly disposes of the message in this case.
Reported-By: Andy Kitchingman
--
Bazsi
More information about the syslog-ng
mailing list