]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
time: only consider packet threads
authorVictor Julien <vjulien@oisf.net>
Mon, 20 May 2024 20:09:06 +0000 (22:09 +0200)
committerVictor Julien <victor@inliniac.net>
Wed, 22 May 2024 18:18:57 +0000 (20:18 +0200)
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.

src/tm-threads.c

index e1eee3b6412cff8e291f5fcdeaddff05408c9ba4..124a7aab5deae180bd875f71e4e209f353d48751 100644 (file)
@@ -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, ==))) {