typedef DetectEngineThreadCtx *DetectEngineThreadCtxPtr;
typedef struct FlowWorkerThreadData_ {
+ DecodeThreadVars *dtv;
+
union {
StreamTcpThread *stream_thread;
void *stream_thread_ptr;
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);
{
FlowWorkerThreadData *fw = data;
+ DecodeThreadVarsFree(tv, fw->dtv);
+
/* free TCP */
StreamTcpThreadDeinit(tv, (void *)fw->stream_thread);
/* 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);