void registry_person_url_free(REGISTRY_PERSON *p, REGISTRY_PERSON_URL *pu) { debug(D_REGISTRY, "registry_person_url_free('%s', '%s')", p->guid, pu->url->url); REGISTRY_PERSON_URL *tpu = registry_person_url_index_del(p, pu); if(tpu) { registry_url_unlink(tpu->url); tpu->machine->links--; registry.persons_urls_memory -= sizeof(REGISTRY_PERSON_URL) + strlen(tpu->machine_name); freez(tpu); } }
void registry_free(void) { if(!registry.enabled) return; // we need to destroy the dictionaries ourselves // since the dictionaries use memory we allocated while(registry.persons->values_index.root) { REGISTRY_PERSON *p = ((NAME_VALUE *)registry.persons->values_index.root)->value; registry_person_del(p); } while(registry.machines->values_index.root) { REGISTRY_MACHINE *m = ((NAME_VALUE *)registry.machines->values_index.root)->value; // fprintf(stderr, "\nMACHINE: '%s', first: %u, last: %u, usages: %u\n", m->guid, m->first_t, m->last_t, m->usages); while(m->machine_urls->values_index.root) { REGISTRY_MACHINE_URL *mu = ((NAME_VALUE *)m->machine_urls->values_index.root)->value; // fprintf(stderr, "\tURL: '%s', first: %u, last: %u, usages: %u, flags: 0x%02x\n", mu->url->url, mu->first_t, mu->last_t, mu->usages, mu->flags); //debug(D_REGISTRY, "Registry: destroying persons dictionary from url '%s'", mu->url->url); //dictionary_destroy(mu->persons); debug(D_REGISTRY, "Registry: deleting url '%s' from person '%s'", mu->url->url, m->guid); dictionary_del(m->machine_urls, mu->url->url); debug(D_REGISTRY, "Registry: unlinking url '%s' from machine", mu->url->url); registry_url_unlink(mu->url); debug(D_REGISTRY, "Registry: freeing machine url"); freez(mu); } debug(D_REGISTRY, "Registry: deleting machine '%s' from machines registry", m->guid); dictionary_del(registry.machines, m->guid); debug(D_REGISTRY, "Registry: destroying URL dictionary of machine '%s'", m->guid); dictionary_destroy(m->machine_urls); debug(D_REGISTRY, "Registry: freeing machine '%s'", m->guid); freez(m); } // and free the memory of remaining dictionary structures debug(D_REGISTRY, "Registry: destroying persons dictionary"); dictionary_destroy(registry.persons); debug(D_REGISTRY, "Registry: destroying machines dictionary"); dictionary_destroy(registry.machines); }