static int Stream5FreeConfigsPolicy( tSfPolicyUserContextId config, tSfPolicyId policyId, void* pData ) { Stream5Config *pPolicyConfig = (Stream5Config *)pData; //do any housekeeping before freeing Stream5Config sfPolicyUserDataClear (config, policyId); Stream5FreeConfig(pPolicyConfig); return 0; }
int RemoveLWSession(Stream5SessionCache *sessionCache, Stream5LWSession *ssn) { Stream5Config *pPolicyConfig = NULL; tSfPolicyId policy_id = ssn->policy_id; mempool_free(&s5FlowMempool, ssn->flowdata); ssn->flowdata = NULL; pPolicyConfig = (Stream5Config *)sfPolicyUserDataGet(ssn->config, policy_id); if (pPolicyConfig != NULL) { pPolicyConfig->ref_count--; if ((pPolicyConfig->ref_count == 0) && (ssn->config != s5_config)) { sfPolicyUserDataClear (ssn->config, policy_id); Stream5FreeConfig(pPolicyConfig); if (sfPolicyUserPolicyGetActive(ssn->config) == 0) Stream5FreeConfigs(ssn->config); } } return sfxhash_remove(sessionCache->hashTable, &(ssn->key)); }