Index: trunk/src/plugins/lib_anymap/loclib.c =================================================================== --- trunk/src/plugins/lib_anymap/loclib.c (revision 10292) +++ trunk/src/plugins/lib_anymap/loclib.c (revision 10293) @@ -38,6 +38,18 @@ newent->backend_data.lng[0] = grp->hdr.oid; } +static void anymap_sheet_uninit(csch_lib_t *root_dir) +{ + csch_cgrp_t *symlib = root_dir->backend_data.ptr[1]; + + if (symlib == NULL) return; + + htsp_free(root_dir->backend_data.ptr[0]); + + root_dir->backend_data.ptr[0] = NULL; + root_dir->backend_data.ptr[1] = NULL; +} + void anymap_sheet_init_(anymap_ctx_t *actx, rnd_design_t *hl, csch_lib_t *root_dir, const csch_cgrp_t *maproot) { if (root_dir->backend_data.ptr[0] == NULL) { @@ -47,6 +59,13 @@ map = root_dir->backend_data.ptr[0] = htsp_alloc(strhash, strkeyeq); root_dir->backend_data.ptr[1] = (void *)maproot; + if (root_dir->backend == NULL) { + static csch_lib_backend_t anymap_be_sheet_free; + anymap_be_sheet_free.name = "anymap_be_sheet_free"; + anymap_be_sheet_free.free = anymap_sheet_uninit; + root_dir->backend = &anymap_be_sheet_free; + } + for(e = htip_first(&maproot->id2obj); e != NULL; e = htip_next(&maproot->id2obj, e)) { csch_cgrp_t *grp = e->value; if (grp->hdr.type == CSCH_CTYPE_GRP) @@ -55,18 +74,7 @@ } } -static void anymap_sheet_uninit(csch_lib_t *root_dir) -{ - csch_cgrp_t *symlib = root_dir->backend_data.ptr[1]; - if (symlib == NULL) return; - - htsp_free(root_dir->backend_data.ptr[0]); - - root_dir->backend_data.ptr[0] = NULL; - root_dir->backend_data.ptr[1] = NULL; -} - void anymap_lht_free(csch_lib_t *src) { csch_lib_t *root_dir = src->parent;