[syslog-ng] [PATCH 1/3] logwritter: free the unconsumed item during configuration reloading

Xufeng Zhang xufeng.zhang at windriver.com
Mon Apr 14 08:24:15 CEST 2014


Otherwise we have no chance to free this stuff.

Signed-off-by: Xufeng Zhang <xufeng.zhang at windriver.com>
---
 lib/logwriter.c |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/lib/logwriter.c b/lib/logwriter.c
index 3292e31..c4d0fdf 100644
--- a/lib/logwriter.c
+++ b/lib/logwriter.c
@@ -33,6 +33,7 @@
 #include "mainloop-call.h"
 #include "ml-batched-timer.h"
 #include "str-format.h"
+#include "logproto-text-client.h"
 
 #include <unistd.h>
 #include <assert.h>
@@ -1006,6 +1007,7 @@ log_writer_flush(LogWriter *self, LogWriterFlushMode flush_mode)
   gint count = 0;
   gboolean ignore_throttle = (flush_mode >= LW_FLUSH_QUEUE);
   LogProtoStatus status = LPS_SUCCESS;
+  LogProtoTextClient *self_text;
   
   if (!proto)
     return FALSE;
@@ -1063,8 +1065,19 @@ log_writer_flush(LogWriter *self, LogWriterFlushMode flush_mode)
         }
       else
         {
-          /* push back to the queue */
-          log_queue_push_head(self->queue, lm, &path_options);
+          self_text = (LogProtoTextClient *) proto;
+          /* free the unconsumed message during configuration reloading */
+          if ((LW_FLUSH_QUEUE == flush_mode) && self_text->partial_free && self_text->partial)
+            {
+              self_text->partial_free(self_text->partial);
+              self_text->partial = NULL;
+              log_msg_unref(lm);
+            }
+          else
+            {	
+              /* push back to the queue */
+              log_queue_push_head(self->queue, lm, &path_options);
+            }
           msg_set_context(NULL);
           log_msg_refcache_stop();
           break;
-- 
1.7.0.2



More information about the syslog-ng mailing list