]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
flush queued segments first when cleaning up a session
authordavis mcpherson <davis.mcpherson@gmail.com>
Mon, 25 Apr 2016 14:03:06 +0000 (10:03 -0400)
committerdavis mcpherson <davis.mcpherson@gmail.com>
Mon, 25 Apr 2016 14:03:06 +0000 (10:03 -0400)
src/stream/tcp/tcp_session.cc

index c5c653c4c6f9907a5e7cbd33300b28fb7f85c36f..b0d5bb8ed73120af18320796b8ac15ab9b3faf65 100644 (file)
@@ -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);