]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
flow worker: set up decoder thread vars
authorVictor Julien <victor@inliniac.net>
Sat, 21 May 2016 12:22:13 +0000 (14:22 +0200)
committerVictor Julien <victor@inliniac.net>
Sat, 21 May 2016 12:22:13 +0000 (14:22 +0200)
src/flow-worker.c

index 778a4e10f6d8d2475c157f77900408d2fd443255..8bb3043ac0b6cad99e6edca35827d447de1152d0 100644 (file)
@@ -50,6 +50,8 @@
 typedef DetectEngineThreadCtx *DetectEngineThreadCtxPtr;
 
 typedef struct FlowWorkerThreadData_ {
+    DecodeThreadVars *dtv;
+
     union {
         StreamTcpThread *stream_thread;
         void *stream_thread_ptr;
@@ -85,6 +87,13 @@ static TmEcode FlowWorkerThreadInit(ThreadVars *tv, void *initdata, void **data)
     SC_ATOMIC_INIT(fw->detect_thread);
     SC_ATOMIC_SET(fw->detect_thread, NULL);
 
+    fw->dtv = DecodeThreadVarsAlloc(tv);
+    if (fw->dtv == NULL) {
+        SC_ATOMIC_DESTROY(fw->detect_thread);
+        SCFree(fw);
+        return TM_ECODE_FAILED;
+    }
+
     /* setup TCP */
     BUG_ON(StreamTcpThreadInit(tv, NULL, &fw->stream_thread_ptr) != TM_ECODE_OK);
 
@@ -110,6 +119,8 @@ static TmEcode FlowWorkerThreadDeinit(ThreadVars *tv, void *data)
 {
     FlowWorkerThreadData *fw = data;
 
+    DecodeThreadVarsFree(tv, fw->dtv);
+
     /* free TCP */
     StreamTcpThreadDeinit(tv, (void *)fw->stream_thread);
 
@@ -147,7 +158,7 @@ TmEcode FlowWorker(ThreadVars *tv, Packet *p, void *data, PacketQueue *preq, Pac
 
     /* handle Flow */
     if (p->flags & PKT_WANTS_FLOW) {
-        FlowHandlePacket(tv, NULL, p); //TODO what to do about decoder thread vars
+        FlowHandlePacket(tv, fw->dtv, p);
         if (likely(p->flow != NULL)) {
             DEBUG_ASSERT_FLOW_LOCKED(p->flow);
             FlowUpdate(tv, fw->stream_thread, p);