static int IPPairBitTest11 (void) { int ret = 0; IPPairInitConfig(TRUE); IPPair *h = IPPairAlloc(); if (h == NULL) goto end; IPPairBitAdd(h, 0,90); IPPairBitAdd(h, 1,90); IPPairBitAdd(h, 2,90); IPPairBitAdd(h, 3,90); XBit *fb = IPPairBitGet(h,3); if (fb == NULL) goto end; IPPairBitRemove(h,3); fb = IPPairBitGet(h,3); if (fb != NULL) { printf("fb != NULL even though it was removed: "); goto end; } ret = 1; IPPairFree(h); end: IPPairCleanup(); return ret; }
static int IPPairBitTest03 (void) { int ret = 0; IPPairInitConfig(TRUE); IPPair *h = IPPairAlloc(); if (h == NULL) goto end; IPPairBitAdd(h, 0, 30); XBit *fb = IPPairBitGet(h,0); if (fb == NULL) { printf("fb == NULL although it was just added: "); goto end; } IPPairBitRemove(h, 0); fb = IPPairBitGet(h,0); if (fb != NULL) { printf("fb != NULL although it was just removed: "); goto end; } else { ret = 1; } IPPairFree(h); end: IPPairCleanup(); return ret; }
/** \brief shutdown the flow engine * \warning Not thread safe */ void IPPairShutdown(void) { IPPair *h; uint32_t u; IPPairPrintStats(); /* free spare queue */ while((h = IPPairDequeue(&ippair_spare_q))) { BUG_ON(SC_ATOMIC_GET(h->use_cnt) > 0); IPPairFree(h); } /* clear and free the hash */ if (ippair_hash != NULL) { for (u = 0; u < ippair_config.hash_size; u++) { h = ippair_hash[u].head; while (h) { IPPair *n = h->hnext; IPPairFree(h); h = n; } HRLOCK_DESTROY(&ippair_hash[u]); } SCFreeAligned(ippair_hash); ippair_hash = NULL; } (void) SC_ATOMIC_SUB(ippair_memuse, ippair_config.hash_size * sizeof(IPPairHashRow)); IPPairQueueDestroy(&ippair_spare_q); SC_ATOMIC_DESTROY(ippair_prune_idx); SC_ATOMIC_DESTROY(ippair_memuse); SC_ATOMIC_DESTROY(ippair_counter); SC_ATOMIC_DESTROY(ippair_config.memcap); //SC_ATOMIC_DESTROY(flow_flags); return; }
static int IPPairBitTest02 (void) { int ret = 0; IPPairInitConfig(TRUE); IPPair *h = IPPairAlloc(); if (h == NULL) goto end; XBit *fb = IPPairBitGet(h,0); if (fb == NULL) ret = 1; IPPairFree(h); end: IPPairCleanup(); return ret; }