flow: enforce flow assumption

Enforce assumption that packets in ThreadVars::decode_pq have no flow
attached to it because this is only true for packets while they are
in the FlowWorker.
pull/8495/head
Victor Julien 2 years ago
parent 66ed3ae6e4
commit a6723bca7c

@ -43,6 +43,7 @@
#include "util-profiling.h"
#include "util-signal.h"
#include "queue.h"
#include "util-validate.h"
#ifdef PROFILE_LOCKING
thread_local uint64_t mutex_lock_contention;
@ -117,6 +118,7 @@ TmEcode TmThreadsSlotVarRun(ThreadVars *tv, Packet *p, TmSlot *slot)
PACKET_PROFILING_TMM_START(p, s->tm_id);
TmEcode r = s->SlotFunc(tv, p, SC_ATOMIC_GET(s->slot_data));
PACKET_PROFILING_TMM_END(p, s->tm_id);
DEBUG_VALIDATE_BUG_ON(p->flow != NULL);
/* handle error */
if (unlikely(r == TM_ECODE_FAILED)) {
@ -130,6 +132,7 @@ TmEcode TmThreadsSlotVarRun(ThreadVars *tv, Packet *p, TmSlot *slot)
Packet *extra_p = PacketDequeueNoLock(&tv->decode_pq);
if (unlikely(extra_p == NULL))
continue;
DEBUG_VALIDATE_BUG_ON(extra_p->flow != NULL);
/* see if we need to process the packet */
if (s->slot_next != NULL) {
@ -175,6 +178,7 @@ static int TmThreadTimeoutLoop(ThreadVars *tv, TmSlot *s)
Packet *p = PacketDequeue(tv->stream_pq);
SCMutexUnlock(&tv->stream_pq->mutex_q);
if (likely(p)) {
DEBUG_VALIDATE_BUG_ON(p->flow != NULL);
r = TmThreadsSlotProcessPkt(tv, fw_slot, p);
if (r == TM_ECODE_FAILED) {
break;

@ -165,6 +165,9 @@ static inline bool TmThreadsHandleInjectedPackets(ThreadVars *tv)
SCMutexUnlock(&pq->mutex_q);
if (extra_p == NULL)
break;
#ifdef DEBUG_VALIDATION
BUG_ON(extra_p->flow != NULL);
#endif
TmEcode r = TmThreadsSlotVarRun(tv, extra_p, tv->tm_flowworker);
if (r == TM_ECODE_FAILED) {
TmThreadsSlotProcessPktFail(tv, tv->tm_flowworker, extra_p);

@ -470,8 +470,10 @@ void TmqhReleasePacketsToPacketPool(PacketQueue *pq)
if (pq == NULL)
return;
while ( (p = PacketDequeue(pq)) != NULL)
while ((p = PacketDequeue(pq)) != NULL) {
DEBUG_VALIDATE_BUG_ON(p->flow != NULL);
TmqhOutputPacketpool(NULL, p);
}
return;
}

Loading…
Cancel
Save