From: Victor Julien Date: Mon, 20 May 2024 20:09:06 +0000 (+0200) Subject: time: only consider packet threads X-Git-Tag: suricata-8.0.0-beta1~1286 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=54557997952028f4617ca37c583f4a5fd070236c;p=thirdparty%2Fsuricata.git time: only consider packet threads In offline mode, a timestamp is kept per thread, and the lowest timestamp of the active threads is used. This was also considering the non-packet threads, which could lead to the used timestamp being further behind that needed. This would happen at the start of the program, as the non-packet threads were set up the same way as the packet threads. This patch both no longer sets up the timestamp for non-packet threads as well as not considering non-packet threads during timestamp retrieval. Fixes: 6f560144c1b9 ("time: improve offline time handling") Bug: #7034. --- diff --git a/src/tm-threads.c b/src/tm-threads.c index e1eee3b641..124a7aab5d 100644 --- a/src/tm-threads.c +++ b/src/tm-threads.c @@ -2211,6 +2211,8 @@ bool TmThreadsTimeSubsysIsReady(void) Thread *t = &thread_store.threads[s]; if (!t->in_use) break; + if (t->type != TVT_PPT) + continue; if (t->sys_sec_stamp == 0) { ready = false; break; @@ -2229,6 +2231,8 @@ void TmThreadsInitThreadsTimestamp(const SCTime_t ts) Thread *t = &thread_store.threads[s]; if (!t->in_use) break; + if (t->type != TVT_PPT) + continue; t->pktts = ts; t->sys_sec_stamp = (uint32_t)systs.tv_sec; } @@ -2249,6 +2253,9 @@ void TmThreadsGetMinimalTimestamp(struct timeval *ts) Thread *t = &thread_store.threads[s]; if (t->in_use == 0) break; + /* only packet threads set timestamps based on packets */ + if (t->type != TVT_PPT) + continue; struct timeval pkttv = { .tv_sec = SCTIME_SECS(t->pktts), .tv_usec = SCTIME_USECS(t->pktts) }; if (!(timercmp(&pkttv, &nullts, ==))) {