/*! * \brief Free all memory used by the given structure * * Free all memory used by the given structure. * The structure must be removed from all linked * lists first * \param _r freed record list */ void free_impurecord(impurecord_t* _r) { struct ul_callback *cbp, *cbp_tmp; struct _reg_subscriber* subscriber, *s_tmp; LM_DBG("free_impurecord\n"); //free IMS specific extensions if (_r->ccf1.s) shm_free(_r->ccf1.s); if (_r->ccf2.s) shm_free(_r->ccf2.s); if (_r->ecf1.s) shm_free(_r->ecf1.s); if (_r->ecf2.s) shm_free(_r->ecf2.s); if (_r->s) { unref_subscription(_r->s); } /*remove REG subscriptions to this IMPU*/ subscriber = _r->shead; while (subscriber) { s_tmp = subscriber->next; free_subscriber(subscriber); subscriber = s_tmp; } _r->shead = 0; if (_r->public_identity.s) shm_free(_r->public_identity.s); if (_r->private_identity.s) shm_free(_r->private_identity.s); //free callback list for (cbp = _r->cbs->first; cbp;) { cbp_tmp = cbp; cbp = cbp->next; if (cbp_tmp->param) shm_free(cbp_tmp->param); shm_free(cbp_tmp); } shm_free(_r->cbs); shm_free(_r); }
void release_subscription(ims_subscription* s) { LM_DBG("Releasing subscription %p [%.*s]\n", s, s->private_identity.len, s->private_identity.s); unref_subscription(s); }