SCFree(this->currentfile);
}
this->currentfile = NULL;
- TmThreadKillThreadsFamily(TVT_MGMT);
- TmThreadClearThreadsFamily(TVT_MGMT);
+
+ /* handle graceful shutdown of the flow engine, it's helper
+ * threads and the packet threads */
+ FlowKillFlowManagerThread();
TmThreadDisableThreadsWithTMS(TM_FLAG_RECEIVE_TM | TM_FLAG_DECODE_TM);
FlowForceReassembly();
TmThreadKillThreadsFamily(TVT_PPT);
TmThreadClearThreadsFamily(TVT_PPT);
+ FlowKillFlowRecyclerThread();
RunModeShutDown();
+
+ /* kill remaining mgt threads */
+ TmThreadKillThreadsFamily(TVT_MGMT);
+ TmThreadClearThreadsFamily(TVT_MGMT);
SCPerfReleaseResources();
- /* thread killed, we can run non thread-safe shutdown functions */
+
+ /* mgt and ppt threads killed, we can run non thread-safe
+ * shutdown functions */
FlowShutdown();
HostCleanup();
StreamTcpFreeConfig(STREAM_VERBOSE);
RunModeInitializeOutputs();
RunModeDispatch(RUNMODE_PCAP_FILE, NULL, this->de_ctx);
FlowManagerThreadSpawn();
+ FlowRecyclerThreadSpawn();
SCPerfSpawnThreads();
/* Un-pause all the paused threads */
TmThreadContinueThreads();