config->show();
}
+void AppIdInspector::third_party_tinit()
+{
+ while (pkt_thread_tp_appid_ctxt->tinit())
+ ;
+}
+
void AppIdInspector::tinit()
{
appid_pub_id = cached_global_pub_id;
assert(!pkt_thread_tp_appid_ctxt);
pkt_thread_tp_appid_ctxt = ctxt.get_tp_appid_ctxt();
if (pkt_thread_tp_appid_ctxt)
- pkt_thread_tp_appid_ctxt->tinit();
+ third_party_tinit();
if (config->log_all_sessions)
appidDebug->set_enabled(true);
if ( snort::HighAvailabilityManager::active() )
bool ACThirdPartyAppIdContextSwap::execute(Analyzer&, void**)
{
- assert(!pkt_thread_tp_appid_ctxt);
- pkt_thread_tp_appid_ctxt = inspector.get_ctxt().get_tp_appid_ctxt();
- pkt_thread_tp_appid_ctxt->tinit();
+ if (!pkt_thread_tp_appid_ctxt)
+ pkt_thread_tp_appid_ctxt = inspector.get_ctxt().get_tp_appid_ctxt();
+ int reload_in_progress = pkt_thread_tp_appid_ctxt->tinit();
+ if (reload_in_progress) {
+ APPID_LOG(nullptr, TRACE_INFO_LEVEL, "== rescheduling third-party context swap\n");
+ return false;
+ }
ThirdPartyAppIdContext::set_tp_reload_in_progress(false);
APPID_LOG(nullptr, TRACE_INFO_LEVEL, "== third-party context swap in progress\n");
return true;