diff --git a/src/runmode-unix-socket.c b/src/runmode-unix-socket.c index 03d7790315..ec53b3f6ff 100644 --- a/src/runmode-unix-socket.c +++ b/src/runmode-unix-socket.c @@ -286,15 +286,24 @@ TmEcode UnixSocketPcapFilesCheck(void *data) 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); @@ -332,6 +341,7 @@ TmEcode UnixSocketPcapFilesCheck(void *data) RunModeInitializeOutputs(); RunModeDispatch(RUNMODE_PCAP_FILE, NULL, this->de_ctx); FlowManagerThreadSpawn(); + FlowRecyclerThreadSpawn(); SCPerfSpawnThreads(); /* Un-pause all the paused threads */ TmThreadContinueThreads();