struct gsm_subscriber *subscr_put(struct gsm_subscriber *subscr) { subscr->use_count--; DEBUGP(DREF, "subscr %s usage decreased usage to: %d\n", subscr->extension, subscr->use_count); if (subscr->use_count <= 0) subscr_free(subscr); return NULL; }
struct gsm_subscriber *subscr_put(struct gsm_subscriber *subscr) { subscr->use_count--; DEBUGP(DREF, "subscr %s usage decreased usage to: %d\n", subscr->extension, subscr->use_count); if (subscr->use_count <= 0 && !((subscr->group && subscr->group->keep_subscr) || subscr->keep_in_ram)) subscr_free(subscr); return NULL; }
int subscr_purge_inactive(struct gsm_subscriber_group *sgrp) { struct gsm_subscriber *subscr, *tmp; int purged = 0; llist_for_each_entry_safe(subscr, tmp, subscr_bsc_active_subscribers(), entry) { if (subscr->group == sgrp && subscr->use_count <= 0) { subscr_free(subscr); purged += 1; } } return purged; }
int subscr_purge_inactive(struct gsm_network *net) { struct gsm_subscriber *subscr, *tmp; int purged = 0; llist_for_each_entry_safe(subscr, tmp, subscr_bsc_active_subscribers(), entry) { if (subscr->net == net && subscr->use_count <= 0) { subscr_free(subscr); purged += 1; } } return purged; }
void subscr_direct_free(struct gsm_subscriber *subscr) { OSMO_ASSERT(subscr->use_count == 1); subscr_free(subscr); }