if ( ( talker_state == TcpStreamTracker::TCP_TIME_WAIT )
|| ( talker_state == TcpStreamTracker::TCP_CLOSED ) )
{
- // The last ACK is a part of the session. Delete the session after processing is
- // complete.
+ // The last ACK is a part of the session. Delete session after processing is complete.
trk.session->clear_session(false, true, false, tsd.is_meta_ack_packet() ? nullptr : tsd.get_pkt() );
flow->session_state |= STREAM_STATE_CLOSED;
trk.session->set_pkt_action_flag(ACTION_LWSSN_CLOSED);
server.init_tcp_state();
lws_init = tcp_init = false;
generate_3whs_alert = true;
+ cleaning = false;
pkt_action_mask = ACTION_NOTHING;
ecn = 0;
ingress_index = egress_index = 0;
void TcpStreamSession::cleanup(Packet* p)
{
+ if ( cleaning )
+ return;
+
+ cleaning = true;
clear_session(true, true, false, p);
client.normalizer.reset();
+ server.normalizer.reset();
+ client.reassembler.reset();
server.reassembler.reset();
+ cleaning = false;
}
void TcpStreamSession::clear()