]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
threading: shrink and reorganize TmSlot
authorVictor Julien <victor@inliniac.net>
Tue, 12 Nov 2019 11:44:57 +0000 (12:44 +0100)
committerVictor Julien <victor@inliniac.net>
Fri, 7 Feb 2020 14:43:10 +0000 (15:43 +0100)
src/tm-threads.c
src/tm-threads.h

index 2d01fd13adeba1eea229962a51497b577f86aba9..3e4f3d6564ba6097e8371c5590d9a5391bf75389 100644 (file)
@@ -785,12 +785,15 @@ void TmSlotSetFuncAppend(ThreadVars *tv, TmModule *tm, const void *data)
         return;
     memset(slot, 0, sizeof(TmSlot));
     SC_ATOMIC_INIT(slot->slot_data);
-    slot->tv = tv;
     slot->SlotThreadInit = tm->ThreadInit;
     slot->slot_initdata = data;
-    slot->SlotFunc = tm->Func;
-    slot->PktAcqLoop = tm->PktAcqLoop;
-    slot->Management = tm->Management;
+    if (tm->Func) {
+        slot->SlotFunc = tm->Func;
+    } else if (tm->PktAcqLoop) {
+        slot->PktAcqLoop = tm->PktAcqLoop;
+    } else if (tm->Management) {
+        slot->Management = tm->Management;
+    }
     slot->SlotThreadExitPrintStats = tm->ThreadExitPrintStats;
     slot->SlotThreadDeinit = tm->ThreadDeinit;
     /* we don't have to check for the return value "-1".  We wouldn't have
index 1fc9469c8f48478a88efaf8a9c85bf1af6d407ae..57f3904e0babda9921534e96f342f15a621bc61b 100644 (file)
@@ -50,13 +50,15 @@ static inline void SleepUsec(uint64_t usec)
 typedef TmEcode (*TmSlotFunc)(ThreadVars *, Packet *, void *, PacketQueue *);
 
 typedef struct TmSlot_ {
-    /* the TV holding this slot */
-    ThreadVars *tv;
-
     /* function pointers */
-    TmSlotFunc SlotFunc;
-
-    TmEcode (*PktAcqLoop)(ThreadVars *, void *, void *);
+    union {
+        TmSlotFunc SlotFunc;
+        TmEcode (*PktAcqLoop)(ThreadVars *, void *, void *);
+        TmEcode (*Management)(ThreadVars *, void *);
+    };
+    /** linked list of slots, used when a pipeline has multiple slots
+     *  in a single thread. */
+    struct TmSlot_ *slot_next;
 
     TmEcode (*SlotThreadInit)(ThreadVars *, const void *, void **);
     void (*SlotThreadExitPrintStats)(ThreadVars *, void *);
@@ -77,12 +79,6 @@ typedef struct TmSlot_ {
     /* slot id, only used my TmVarSlot to know what the first slot is */
     int id;
 
-    /* linked list, only used when you have multiple slots(used by TmVarSlot) */
-    struct TmSlot_ *slot_next;
-
-    /* just called once, so not perf critical */
-    TmEcode (*Management)(ThreadVars *, void *);
-
 } TmSlot;
 
 extern ThreadVars *tv_root[TVT_MAX];