From f48ce8f140388f9a6cff4b9114ac20ac6f5f17cb Mon Sep 17 00:00:00 2001 From: Anoop Saldanha Date: Fri, 14 Oct 2011 23:16:35 +0530 Subject: [PATCH 2/2] introduce SCPerfSyncCounters/SCPerfSyncCounters macro to synchronize counters --- src/app-layer-detect-proto.c | 2 +- src/counters.h | 11 ++++++++++- src/cuda-packet-batcher.c | 2 +- src/flow-manager.c | 2 +- src/source-af-packet.c | 5 +---- src/source-pcap-file.c | 4 +--- src/source-pcap.c | 5 +---- src/source-pfring.c | 5 +---- src/tm-threads.c | 12 ++++++------ src/tmqh-flow.c | 3 +-- src/tmqh-ringbuffer.c | 9 +++------ src/tmqh-simple.c | 3 +-- 12 files changed, 28 insertions(+), 35 deletions(-) diff --git a/src/app-layer-detect-proto.c b/src/app-layer-detect-proto.c index ab9f5a0..d884ee1 100644 --- a/src/app-layer-detect-proto.c +++ b/src/app-layer-detect-proto.c @@ -691,7 +691,7 @@ void *AppLayerDetectProtoThread(void *td) } if (TmThreadsCheckFlag(tv, THV_KILL)) { - SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0); + SCPerfSyncCounters(tv, 0); run = 0; } } diff --git a/src/counters.h b/src/counters.h index 4133f48..a46f8c7 100644 --- a/src/counters.h +++ b/src/counters.h @@ -215,7 +215,6 @@ typedef struct SCPerfOPIfaceContext_ { SCMutex pctmi_lock; } SCPerfOPIfaceContext; - /* the initialization functions */ void SCPerfInitCounterApi(void); void SCPerfSpawnThreads(void); @@ -260,4 +259,14 @@ void SCPerfRegisterTests(void); void SCPerfCounterAddUI64(uint16_t, SCPerfCounterArray *, uint64_t); void SCPerfCounterAddDouble(uint16_t, SCPerfCounterArray *, double); +#define SCPerfSyncCounters(tv, reset_lc) \ + SCPerfUpdateCounterArray((tv)->sc_perf_pca, &(tv)->sc_perf_pctx, (reset_lc)); \ + +#define SCPerfSyncCountersIfSignalled(tv, reset_lc) \ + do { \ + if ((tv)->sc_perf_pctx.perf_flag == 1) { \ + SCPerfUpdateCounterArray((tv)->sc_perf_pca, &(tv)->sc_perf_pctx, (reset_lc)); \ + } \ + } while (0) + #endif /* __COUNTERS_H__ */ diff --git a/src/cuda-packet-batcher.c b/src/cuda-packet-batcher.c index 67d17e9..2fd8256 100644 --- a/src/cuda-packet-batcher.c +++ b/src/cuda-packet-batcher.c @@ -367,7 +367,7 @@ void *SCCudaPBTmThreadsSlot1(void *td) } if (TmThreadsCheckFlag(tv, THV_KILL)) { - SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0); + SCPerfSyncCounters(tv, 0); run = 0; } } diff --git a/src/flow-manager.c b/src/flow-manager.c index bcabdb2..ead1dcd 100644 --- a/src/flow-manager.c +++ b/src/flow-manager.c @@ -219,7 +219,7 @@ void *FlowManagerThread(void *td) } if (TmThreadsCheckFlag(th_v, THV_KILL)) { - SCPerfUpdateCounterArray(th_v->sc_perf_pca, &th_v->sc_perf_pctx, 0); + SCPerfSyncCounters(th_v, 0); break; } diff --git a/src/source-af-packet.c b/src/source-af-packet.c index 6af2951..e5d9b95 100644 --- a/src/source-af-packet.c +++ b/src/source-af-packet.c @@ -390,10 +390,7 @@ TmEcode ReceiveAFPLoop(ThreadVars *tv, void *data, void *slot) ptv->afp_state = AFP_STATE_DOWN; continue; } - - if (tv->sc_perf_pctx.perf_flag == 1) { - SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0); - } + SCPerfSyncCountersIfSignalled(tv, 0); } if (suricata_ctl_flags & SURICATA_STOP || diff --git a/src/source-pcap-file.c b/src/source-pcap-file.c index b814144..fa9dc05 100644 --- a/src/source-pcap-file.c +++ b/src/source-pcap-file.c @@ -183,9 +183,7 @@ TmEcode ReceivePcapFileLoop(ThreadVars *tv, void *data, void *slot) { EngineStop(); break; } - if (tv->sc_perf_pctx.perf_flag == 1) { - SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0); - } + SCPerfSyncCountersIfSignalled(tv, 0); } SCReturnInt(TM_ECODE_OK); diff --git a/src/source-pcap.c b/src/source-pcap.c index 82e5cb9..f1344a0 100644 --- a/src/source-pcap.c +++ b/src/source-pcap.c @@ -264,10 +264,7 @@ TmEcode ReceivePcapLoop(ThreadVars *tv, void *data, void *slot) break; } } - - if (tv->sc_perf_pctx.perf_flag == 1) { - SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0); - } + SCPerfSyncCountersIfSignalled(tv, 0); } SCReturnInt(TM_ECODE_OK); diff --git a/src/source-pfring.c b/src/source-pfring.c index bd18fe9..4c2edfc 100644 --- a/src/source-pfring.c +++ b/src/source-pfring.c @@ -249,10 +249,7 @@ TmEcode ReceivePfringLoop(ThreadVars *tv, void *data, void *slot) TmqhOutputPacketpool(ptv->tv, p); return TM_ECODE_FAILED; } - - if (tv->sc_perf_pctx.perf_flag == 1) { - SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0); - } + SCPerfSyncCountersIfSignalled(tv, 0); } return TM_ECODE_OK; diff --git a/src/tm-threads.c b/src/tm-threads.c index bd6fc17..7ab3964 100644 --- a/src/tm-threads.c +++ b/src/tm-threads.c @@ -172,7 +172,7 @@ void *TmThreadsSlot1NoIn(void *td) } if (TmThreadsCheckFlag(tv, THV_KILL)) { - SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0); + SCPerfSyncCounters(tv, 0); run = 0; } } /* while (run) */ @@ -244,7 +244,7 @@ void *TmThreadsSlot1NoOut(void *td) } if (TmThreadsCheckFlag(tv, THV_KILL)) { - SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0); + SCPerfSyncCounters(tv, 0); run = 0; } } /* while (run) */ @@ -311,7 +311,7 @@ void *TmThreadsSlot1NoInOut(void *td) } if (TmThreadsCheckFlag(tv, THV_KILL)) { - SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0); + SCPerfSyncCounters(tv, 0); run = 0; } } /* while (run) */ @@ -413,7 +413,7 @@ void *TmThreadsSlot1(void *td) } if (TmThreadsCheckFlag(tv, THV_KILL)) { - SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0); + SCPerfSyncCounters(tv, 0); run = 0; } } /* while (run) */ @@ -571,7 +571,7 @@ void *TmThreadsSlotPktAcqLoop(void *td) { run = 0; } } - SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0); + SCPerfSyncCounters(tv, 0); TmThreadWaitForFlag(tv, THV_DEINIT); @@ -693,7 +693,7 @@ void *TmThreadsSlotVar(void *td) run = 0; } } /* while (run) */ - SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0); + SCPerfSyncCounters(tv, 0); TmThreadWaitForFlag(tv, THV_DEINIT); diff --git a/src/tmqh-flow.c b/src/tmqh-flow.c index 036bf29..1bf208d 100644 --- a/src/tmqh-flow.c +++ b/src/tmqh-flow.c @@ -73,8 +73,7 @@ Packet *TmqhInputFlow(ThreadVars *tv) SCCondWait(&q->cond_q, &q->mutex_q); } - if (tv->sc_perf_pctx.perf_flag == 1) - SCPerfUpdateCounterArray(tv->sc_perf_pca, &tv->sc_perf_pctx, 0); + SCPerfSyncCountersIfSignalled(tv, 0); if (q->len > 0) { Packet *p = PacketDequeue(q); diff --git a/src/tmqh-ringbuffer.c b/src/tmqh-ringbuffer.c index e2d7904..6008ac2 100644 --- a/src/tmqh-ringbuffer.c +++ b/src/tmqh-ringbuffer.c @@ -94,8 +94,7 @@ Packet *TmqhInputRingBufferMrSw(ThreadVars *t) Packet *p = (Packet *)RingBufferMrSw8Get(rb); - if (t->sc_perf_pctx.perf_flag == 1) - SCPerfUpdateCounterArray(t->sc_perf_pca, &t->sc_perf_pctx, 0); + SCPerfSyncCountersIfSignalled(t, 0); return p; } @@ -112,8 +111,7 @@ Packet *TmqhInputRingBufferSrSw(ThreadVars *t) Packet *p = (Packet *)RingBufferSrSw8Get(rb); - if (t->sc_perf_pctx.perf_flag == 1) - SCPerfUpdateCounterArray(t->sc_perf_pca, &t->sc_perf_pctx, 0); + SCPerfSyncCountersIfSignalled(t, 0); return p; } @@ -130,8 +128,7 @@ Packet *TmqhInputRingBufferSrMw(ThreadVars *t) Packet *p = (Packet *)RingBufferSrMw8Get(rb); - if (t->sc_perf_pctx.perf_flag == 1) - SCPerfUpdateCounterArray(t->sc_perf_pca, &t->sc_perf_pctx, 0); + SCPerfSyncCountersIfSignalled(t, 0); return p; } diff --git a/src/tmqh-simple.c b/src/tmqh-simple.c index fee8069..53277db 100644 --- a/src/tmqh-simple.c +++ b/src/tmqh-simple.c @@ -53,8 +53,7 @@ Packet *TmqhInputSimple(ThreadVars *t) SCCondWait(&q->cond_q, &q->mutex_q); } - if (t->sc_perf_pctx.perf_flag == 1) - SCPerfUpdateCounterArray(t->sc_perf_pca, &t->sc_perf_pctx, 0); + SCPerfSyncCountersIfSignalled(t, 0); if (q->len > 0) { Packet *p = PacketDequeue(q); -- 1.7.1