#include <random>
+#include "snort.h"
#include "protocols/packet.h"
//-------------------------------------------------------------------------
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()
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
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*)
void tcp_tterm()
{
tcp_sterm();
+ FlushBucket::clear();
}
static const InspectApi tcp_api =