diff --git a/src/flow-worker.c b/src/flow-worker.c index 21a210fee7..4f96ac1f63 100644 --- a/src/flow-worker.c +++ b/src/flow-worker.c @@ -73,11 +73,6 @@ typedef struct FlowWorkerThreadData_ { static void FlowUpdate(ThreadVars *tv, StreamTcpThread *stt, Packet *p) { FlowHandlePacketUpdate(p->flow, p); - - /* handle the app layer part of the UDP packet payload */ - if (p->proto == IPPROTO_UDP) { - AppLayerHandleUdp(tv, stt->ra_ctx->app_tctx, p, p->flow); - } } static TmEcode FlowWorkerThreadInit(ThreadVars *tv, void *initdata, void **data) @@ -206,6 +201,12 @@ TmEcode FlowWorker(ThreadVars *tv, Packet *p, void *data, PacketQueue *preq, Pac * by the other thread modules before packet 'p'. */ PacketEnqueue(preq, x); } + + /* handle the app layer part of the UDP packet payload */ + } else if (p->flow && p->proto == IPPROTO_UDP) { + FLOWWORKER_PROFILING_START(p, PROFILE_FLOWWORKER_APPLAYERUDP); + AppLayerHandleUdp(tv, fw->stream_thread->ra_ctx->app_tctx, p, p->flow); + FLOWWORKER_PROFILING_END(p, PROFILE_FLOWWORKER_APPLAYERUDP); } /* handle Detect */ @@ -252,6 +253,8 @@ const char *ProfileFlowWorkerIdToString(enum ProfileFlowWorkerId fwi) return "flow"; case PROFILE_FLOWWORKER_STREAM: return "stream"; + case PROFILE_FLOWWORKER_APPLAYERUDP: + return "app-layer"; case PROFILE_FLOWWORKER_DETECT: return "detect"; case PROFILE_FLOWWORKER_SIZE: diff --git a/src/flow-worker.h b/src/flow-worker.h index bda621063c..418ea05d6c 100644 --- a/src/flow-worker.h +++ b/src/flow-worker.h @@ -21,6 +21,7 @@ enum ProfileFlowWorkerId { PROFILE_FLOWWORKER_FLOW = 0, PROFILE_FLOWWORKER_STREAM, + PROFILE_FLOWWORKER_APPLAYERUDP, PROFILE_FLOWWORKER_DETECT, PROFILE_FLOWWORKER_SIZE };