Index: trunk/src/libcschem/concrete.c =================================================================== --- trunk/src/libcschem/concrete.c (revision 4540) +++ trunk/src/libcschem/concrete.c (revision 4541) @@ -108,6 +108,9 @@ htpi_uninit(&sheet->util_wirenet.recalc_wn); + csch_lib_free_sheet_local_libs(sheet); + csch_lib_free_sheet_libs(sheet); + uundo_list_uninit(&sheet->undo); csch_cgrp_uninit(&sheet->direct); @@ -130,8 +133,6 @@ free(sheet->design_dir); sheet->design_dir = NULL; - csch_lib_free_sheet_local_libs(sheet); - csch_lib_free_sheet_libs(sheet); } void csch_sheet_free(csch_sheet_t *sheet) Index: trunk/src/libcschem/plug_library.c =================================================================== --- trunk/src/libcschem/plug_library.c (revision 4540) +++ trunk/src/libcschem/plug_library.c (revision 4541) @@ -62,6 +62,11 @@ { long n; + for(n = 0; n < sl->children.used; n++) { + csch_lib_uninit(sl->children.array[n]); + free(sl->children.array[n]); + } + if ((sl->backend != NULL) && (sl->backend->free != NULL)) sl->backend->free(sl); if (sl->realpath != sl->name) @@ -68,10 +73,6 @@ free(sl->realpath); free(sl->name); - for(n = 0; n < sl->children.used; n++) { - csch_lib_uninit(sl->children.array[n]); - free(sl->children.array[n]); - } vtp0_uninit(&sl->children); } @@ -312,6 +313,10 @@ while(root->parent != NULL) root = root->parent; + if (root->realpath == NULL) { + rnd_message(RND_MSG_ERROR, "csch_lib_rehash(): library tree does not have a realpath, can not be refreshed\n"); + return -1; + } orig_root = htsp_pop(&master->roots, root->realpath); if (orig_root == NULL) { rnd_message(RND_MSG_ERROR, "csch_lib_rehash(): failed to find original root\n");