From feeb622c4e0c622559df803f8df6da39bf3015e7 Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Thu, 30 Jul 2009 09:47:47 +0200 Subject: bugfix: discard action caused segfault --- ChangeLog | 3 +++ runtime/modules.c | 8 +++++--- tests/Makefile.am | 3 +++ tests/discard.sh | 16 ++++++++++++++++ tests/testsuites/discard.conf | 13 +++++++++++++ 5 files changed, 40 insertions(+), 3 deletions(-) create mode 100755 tests/discard.sh create mode 100644 tests/testsuites/discard.conf diff --git a/ChangeLog b/ChangeLog index 4773b07d..76fe3ff0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,7 @@ --------------------------------------------------------------------------- +Version 5.1.4 [DEVEL] (rgerhards), 2009-07-?? +- bugfix: discard action caused segfault +--------------------------------------------------------------------------- Version 5.1.3 [DEVEL] (rgerhards), 2009-07-28 - architecture change: queue now always has at least one worker thread if not running in direct mode. Previous versions could run without diff --git a/runtime/modules.c b/runtime/modules.c index b588909e..eee3b46e 100644 --- a/runtime/modules.c +++ b/runtime/modules.c @@ -466,10 +466,12 @@ doModInit(rsRetVal (*modInit)(int, int*, rsRetVal(**)(), rsRetVal(*)(), modInfo_ ABORT_FINALIZE(localRet); localRet = (*pNew->modQueryEtryPt)((uchar*)"endTransaction", &pNew->mod.om.endTransaction); - if(localRet == RS_RET_MODULE_ENTRY_POINT_NOT_FOUND) - pNew->mod.om.beginTransaction = dummyEndTransaction; - else if(localRet != RS_RET_OK) + if(localRet == RS_RET_MODULE_ENTRY_POINT_NOT_FOUND) { + pNew->mod.om.endTransaction = dummyEndTransaction; + //pNew->mod.om.beginTransaction = dummyEndTransaction; + } else if(localRet != RS_RET_OK) { ABORT_FINALIZE(localRet); + } break; case eMOD_LIB: break; diff --git a/tests/Makefile.am b/tests/Makefile.am index 4ea641f0..2a3dbaf2 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -21,6 +21,7 @@ TESTS += omod-if-array.sh \ inputname.sh \ threadingmq.sh \ threadingmqaq.sh \ + discard.sh \ fieldtest.sh endif @@ -114,6 +115,8 @@ EXTRA_DIST= 1.rstest 2.rstest 3.rstest err1.rstest \ testsuites/1.inputname_imtcp_12515 \ testsuites/1.inputname_imtcp_12516 \ omod-if-array.sh \ + discard.sh \ + testsuites/discard.conf \ diag.sh \ testsuites/diag-common.conf \ daqueue-persist.sh \ diff --git a/tests/discard.sh b/tests/discard.sh new file mode 100755 index 00000000..b230bc11 --- /dev/null +++ b/tests/discard.sh @@ -0,0 +1,16 @@ +# Test for discard functionality +# This test checks if discard works. It is not a perfect test but +# will find at least segfaults and obviously not discarded messages. +# added 2009-07-30 by Rgerhards +# This file is part of the rsyslog project, released under GPLv3 +# uncomment for debugging support: +echo TEST discard.sh: testing discard functionality +source $srcdir/diag.sh init +source $srcdir/diag.sh startup discard.conf +# 20000 messages should be enough - the disk test is slow enough ;) +sleep 4 +source $srcdir/diag.sh tcpflood 127.0.0.1 13514 1 10 1 +source $srcdir/diag.sh shutdown-when-empty # shut down rsyslogd when done processing messages +source $srcdir/diag.sh wait-shutdown +source $srcdir/diag.sh seq-check 2 10 +source $srcdir/diag.sh exit diff --git a/tests/testsuites/discard.conf b/tests/testsuites/discard.conf new file mode 100644 index 00000000..bbe2fe77 --- /dev/null +++ b/tests/testsuites/discard.conf @@ -0,0 +1,13 @@ +# Test for discard functionality +# rgerhards, 2009-07-30 +$IncludeConfig diag-common.conf + +$ModLoad ../plugins/imtcp/.libs/imtcp +$MainMsgQueueTimeoutShutdown 10000 +$InputTCPServerRun 13514 + +:msg, contains, "00000001" ~ + +$template outfmt,"%msg:F,58:2%\n" +$template dynfile,"rsyslog.out.log" # trick to use relative path names! +:msg, contains, "msgnum:" ?dynfile;outfmt -- cgit