From: Russ Combs Date: Tue, 19 Aug 2014 17:29:43 +0000 (-0400) Subject: fixed flush bucket dumping X-Git-Tag: 3.0.0-233~1419^2~41 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1ba06eae5a49b9d2f991e1022384bc217edd2368;p=thirdparty%2Fsnort3.git fixed flush bucket dumping --- diff --git a/src/stream/flush_bucket.cc b/src/stream/flush_bucket.cc index 9289e2525..c9d432f8d 100644 --- a/src/stream/flush_bucket.cc +++ b/src/stream/flush_bucket.cc @@ -25,6 +25,7 @@ #include +#include "snort.h" #include "protocols/packet.h" //------------------------------------------------------------------------- @@ -33,9 +34,21 @@ static THREAD_LOCAL FlushBucket* s_flush_bucket = nullptr; -void FlushBucket::set(FlushBucket* fb) +void FlushBucket::set(unsigned sz) { - s_flush_bucket = fb; + if ( s_flush_bucket ) + return; + + if ( sz ) + s_flush_bucket = new ConstFlushBucket(sz); + + else if ( ScStaticHash() ) + s_flush_bucket = new StaticFlushBucket; + + else + s_flush_bucket = new RandomFlushBucket; + + assert(s_flush_bucket); } void FlushBucket::clear() diff --git a/src/stream/flush_bucket.h b/src/stream/flush_bucket.h index 58b31cbcf..2d00a8991 100644 --- a/src/stream/flush_bucket.h +++ b/src/stream/flush_bucket.h @@ -31,12 +31,11 @@ public: virtual uint16_t get_next() = 0; static uint16_t get_size(); - static void set(FlushBucket*); + static void set(unsigned sz); static void clear(); protected: FlushBucket() { }; - static FlushBucket* flush_bucket; }; class ConstFlushBucket : public FlushBucket diff --git a/src/stream/tcp/stream_tcp.cc b/src/stream/tcp/stream_tcp.cc index 90debb97d..2499cfb4b 100644 --- a/src/stream/tcp/stream_tcp.cc +++ b/src/stream/tcp/stream_tcp.cc @@ -76,23 +76,13 @@ void StreamTcp::show(SnortConfig*) void StreamTcp::tinit() { - FlushBucket* fb; - - if ( config->footprint ) - fb = new ConstFlushBucket(config->footprint); - - else if ( ScStaticHash() ) - fb = new StaticFlushBucket; - - else - fb = new RandomFlushBucket; - - FlushBucket::set(fb); + FlushBucket::set(config->footprint); } void StreamTcp::tterm() { - //FlushBucket::clear(); FIXIT must be called after StreamBase::tterm() + // must be done after StreamBase::tterm(); see tcp_tterm() + //FlushBucket::clear(); } void StreamTcp::eval(Packet*) @@ -141,6 +131,7 @@ void tcp_tinit() void tcp_tterm() { tcp_sterm(); + FlushBucket::clear(); } static const InspectApi tcp_api =