*/
void SCPerfCounterAddUI64(ThreadVars *tv, uint16_t id, uint64_t x)
{
- SCPerfPrivateContext *pca = tv->perf_private_ctx;
-
- if (!pca) {
- SCLogDebug("counterarray is NULL");
+ SCPerfPrivateContext *pca = &tv->perf_private_ctx;
+#ifdef UNITTESTS
+ if (pca->initialized == 0)
return;
- }
+#endif
#ifdef DEBUG
BUG_ON ((id < 1) || (id > pca->size));
#endif
*/
void SCPerfCounterIncr(ThreadVars *tv, uint16_t id)
{
- SCPerfPrivateContext *pca = tv->perf_private_ctx;
-
- if (pca == NULL) {
- SCLogDebug("counterarray is NULL");
+ SCPerfPrivateContext *pca = &tv->perf_private_ctx;
+#ifdef UNITTESTS
+ if (pca->initialized == 0)
return;
- }
-
+#endif
#ifdef DEBUG
BUG_ON ((id < 1) || (id > pca->size));
#endif
-
pca->head[id].ui64_cnt++;
pca->head[id].syncs++;
return;
*/
void SCPerfCounterSetUI64(ThreadVars *tv, uint16_t id, uint64_t x)
{
- SCPerfPrivateContext *pca = tv->perf_private_ctx;
-
- if (!pca) {
- SCLogDebug("counterarray is NULL");
+ SCPerfPrivateContext *pca = &tv->perf_private_ctx;
+#ifdef UNITTESTS
+ if (pca->initialized == 0)
return;
- }
-
+#endif
#ifdef DEBUG
BUG_ON ((id < 1) || (id > pca->size));
#endif
*
* \retval a counter-array in this(s_id-e_id) range for this TM instance
*/
-SCPerfPrivateContext *SCPerfGetCounterArrayRange(uint16_t s_id, uint16_t e_id,
- SCPerfPublicContext *pctx)
+static int SCPerfGetCounterArrayRange(uint16_t s_id, uint16_t e_id,
+ SCPerfPublicContext *pctx,
+ SCPerfPrivateContext *pca)
{
SCPerfCounter *pc = NULL;
- SCPerfPrivateContext *pca = NULL;
uint32_t i = 0;
- if (pctx == NULL) {
- SCLogDebug("pctx is NULL");
- return NULL;
+ if (pctx == NULL || pca == NULL) {
+ SCLogDebug("pctx/pca is NULL");
+ return -1;
}
if (s_id < 1 || e_id < 1 || s_id > e_id) {
SCLogDebug("error with the counter ids");
- return NULL;
+ return -1;
}
if (e_id > pctx->curr_id) {
SCLogDebug("end id is greater than the max id for this tv");
- return NULL;
+ return -1;
}
- if ( (pca = SCMalloc(sizeof(SCPerfPrivateContext))) == NULL)
- return NULL;
- memset(pca, 0, sizeof(SCPerfPrivateContext));
-
if ( (pca->head = SCMalloc(sizeof(SCPCAElem) * (e_id - s_id + 2))) == NULL) {
- SCFree(pca);
- return NULL;
+ return -1;
}
memset(pca->head, 0, sizeof(SCPCAElem) * (e_id - s_id + 2));
}
pca->size = i - 1;
- return pca;
+ pca->initialized = 1;
+ return 0;
}
/**
* \retval pca Pointer to a counter-array for all counter of this tm instance
* on success; NULL on failure
*/
-SCPerfPrivateContext *SCPerfGetAllCountersArray(SCPerfPublicContext *pctx)
+int SCPerfGetAllCountersArray(SCPerfPublicContext *pctx, SCPerfPrivateContext *private)
{
- SCPerfPrivateContext *pca = ((pctx)?
- SCPerfGetCounterArrayRange(1, pctx->curr_id, pctx):
- NULL);
+ if (pctx == NULL || private == NULL)
+ return -1;
- return pca;
+ return SCPerfGetCounterArrayRange(1, pctx->curr_id, pctx, private);
}
/**
*/
uint64_t SCPerfGetLocalCounterValue(ThreadVars *tv, uint16_t id)
{
- SCPerfPrivateContext *pca = tv->perf_private_ctx;
+ SCPerfPrivateContext *pca = &tv->perf_private_ctx;
#ifdef DEBUG
- BUG_ON (pca == NULL);
BUG_ON ((id < 1) || (id > pca->size));
#endif
return pca->head[id].ui64_cnt;
void SCPerfReleasePCA(SCPerfPrivateContext *pca)
{
if (pca != NULL) {
- if (pca->head != NULL)
+ if (pca->head != NULL) {
SCFree(pca->head);
-
- SCFree(pca);
+ pca->head = NULL;
+ }
+ pca->initialized = 0;
}
return;
return 0;
}
- tv.perf_private_ctx = SCPerfGetAllCountersArray(NULL);
-
- return (!tv.perf_private_ctx)?1:0;
+ int r = SCPerfGetAllCountersArray(NULL, &tv.perf_private_ctx);
+ return (r == -1) ? 1 : 0;
}
static int SCPerfTestGetCntArray06()
if (id != 1)
return 0;
- tv.perf_private_ctx = SCPerfGetAllCountersArray(&tv.perf_public_ctx);
+ int r = SCPerfGetAllCountersArray(&tv.perf_public_ctx, &tv.perf_private_ctx);
- result = (tv.perf_private_ctx)?1:0;
+ result = (r == 0) ? 1 : 0;
SCPerfReleasePerfCounterS(tv.perf_public_ctx.head);
- SCPerfReleasePCA(tv.perf_private_ctx);
+ SCPerfReleasePCA(&tv.perf_private_ctx);
return result;
}
SCPerfRegisterCounter("t2", "c2", SC_PERF_TYPE_UINT64, NULL,
&tv.perf_public_ctx);
- pca = tv.perf_private_ctx = SCPerfGetAllCountersArray(&tv.perf_public_ctx);
+ SCPerfGetAllCountersArray(&tv.perf_public_ctx, &tv.perf_private_ctx);
+ pca = &tv.perf_private_ctx;
SCPerfCounterIncr(&tv, 1);
SCPerfCounterIncr(&tv, 2);
id = SCPerfRegisterCounter("t1", "c1", SC_PERF_TYPE_UINT64, NULL,
&tv.perf_public_ctx);
- pca = tv.perf_private_ctx = SCPerfGetAllCountersArray(&tv.perf_public_ctx);
+ SCPerfGetAllCountersArray(&tv.perf_public_ctx, &tv.perf_private_ctx);
+ pca = &tv.perf_private_ctx;
SCPerfCounterIncr(&tv, id);
SCPerfCounterAddUI64(&tv, id, 100);
id2 = SCPerfRegisterCounter("t5", "c5", SC_PERF_TYPE_UINT64, NULL,
&tv.perf_public_ctx);
- pca = tv.perf_private_ctx = SCPerfGetAllCountersArray(&tv.perf_public_ctx);
+ SCPerfGetAllCountersArray(&tv.perf_public_ctx, &tv.perf_private_ctx);
+ pca = &tv.perf_private_ctx;
SCPerfCounterIncr(&tv, id2);
SCPerfCounterAddUI64(&tv, id2, 100);
id3 = SCPerfRegisterCounter("t3", "c3", SC_PERF_TYPE_UINT64, NULL,
&tv.perf_public_ctx);
- pca = tv.perf_private_ctx = SCPerfGetAllCountersArray(&tv.perf_public_ctx);
+ SCPerfGetAllCountersArray(&tv.perf_public_ctx, &tv.perf_private_ctx);
+ pca = &tv.perf_private_ctx;
SCPerfCounterIncr(&tv, id1);
SCPerfCounterAddUI64(&tv, id2, 100);
id4 = SCPerfRegisterCounter("t4", "c4", SC_PERF_TYPE_UINT64, NULL,
&tv.perf_public_ctx);
- pca = tv.perf_private_ctx = SCPerfGetAllCountersArray(&tv.perf_public_ctx);
+ SCPerfGetAllCountersArray(&tv.perf_public_ctx, &tv.perf_private_ctx);
+ pca = &tv.perf_private_ctx;
SCPerfCounterIncr(&tv, id1);
SCPerfCounterAddUI64(&tv, id2, 256);