From: davis mcpherson Date: Mon, 25 Apr 2016 14:03:06 +0000 (-0400) Subject: flush queued segments first when cleaning up a session X-Git-Tag: 3.0.0-233~426^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=76bd441402ad3a9c2e867fd281c980bdfd5d2fa1;p=thirdparty%2Fsnort3.git flush queued segments first when cleaning up a session --- diff --git a/src/stream/tcp/tcp_session.cc b/src/stream/tcp/tcp_session.cc index c5c653c4c..b0d5bb8ed 100644 --- a/src/stream/tcp/tcp_session.cc +++ b/src/stream/tcp/tcp_session.cc @@ -186,20 +186,6 @@ void TcpSession::restart(Packet* p) void TcpSession::clear_session(bool free_flow_data, bool flush_segments, bool restart, Packet* p) { - if ( tcp_init ) - tcpStats.released++; - else if ( lws_init ) - tcpStats.no_pickups++; - else - return; - - if (flow->get_session_flags() & SSNFLAG_PRUNED) - tcpStats.prunes++; - else if (flow->get_session_flags() & SSNFLAG_TIMEDOUT) - tcpStats.timeouts++; - - update_perf_base_state(TcpStreamTracker::TCP_CLOSED); - if ( client->reassembler ) { if( flush_segments ) @@ -214,6 +200,20 @@ void TcpSession::clear_session(bool free_flow_data, bool flush_segments, bool re server->reassembler->purge_segment_list(); } + if ( tcp_init ) + tcpStats.released++; + else if ( lws_init ) + tcpStats.no_pickups++; + else + return; + + if (flow->get_session_flags() & SSNFLAG_PRUNED) + tcpStats.prunes++; + else if (flow->get_session_flags() & SSNFLAG_TIMEDOUT) + tcpStats.timeouts++; + + update_perf_base_state(TcpStreamTracker::TCP_CLOSED); + if( restart ) { flow->restart(free_flow_data);