Index: trunk/src/libcschem/integrity.c =================================================================== --- trunk/src/libcschem/integrity.c (revision 3516) +++ trunk/src/libcschem/integrity.c (revision 3517) @@ -156,3 +156,9 @@ { RND_REGISTER_ACTIONS(csch_integrity_act_list, integrity_cookie); } + +void csch_integrity_act_uninit(void) +{ + rnd_remove_actions_by_cookie(integrity_cookie); +} + Index: trunk/src/libcschem/integrity.h =================================================================== --- trunk/src/libcschem/integrity.h (revision 3516) +++ trunk/src/libcschem/integrity.h (revision 3517) @@ -45,3 +45,4 @@ void csch_integrity_act_init(void); +void csch_integrity_act_uninit(void); Index: trunk/src/libcschem/libcschem.c =================================================================== --- trunk/src/libcschem/libcschem.c (revision 3516) +++ trunk/src/libcschem/libcschem.c (revision 3517) @@ -51,7 +51,10 @@ void csch_uninit(void) { csch_plug_io_act_uninit(); + csch_project_act_uninit(); + csch_integrity_act_uninit(); csch_undo_act_uninit(); + csch_plug_library_uninit(); } int csch_init_actions() Index: trunk/src/libcschem/plug_library.c =================================================================== --- trunk/src/libcschem/plug_library.c (revision 3516) +++ trunk/src/libcschem/plug_library.c (revision 3517) @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -283,6 +284,16 @@ vtp0_append(&master->backends, (void *)be); } +static void csch_lib_uninit_master(csch_lib_master_t *master) +{ + free(master->name); + vtp0_uninit(&master->backends); + genht_uninit_deep(htsp, &master->roots, { + csch_lib_uninit(htent->value); + free(htent->value); + }); +} + csch_lib_master_t *csch_lib_get_master(const char *name, int alloc) { csch_lib_master_t *res = htsp_get(&lib_masters, name); @@ -360,3 +371,11 @@ /* backends is all-zero already */ } + +void csch_plug_library_uninit(void) +{ + genht_uninit_deep(htsp, &lib_masters, { + csch_lib_uninit_master(htent->value); + free(htent->value); + }); +} Index: trunk/src/libcschem/plug_library.h =================================================================== --- trunk/src/libcschem/plug_library.h (revision 3516) +++ trunk/src/libcschem/plug_library.h (revision 3517) @@ -131,5 +131,6 @@ void csch_lib_free(csch_lib_t *slib); void csch_plug_symlib_init(void); void csch_plug_library_init(void); +void csch_plug_library_uninit(void); #endif Index: trunk/src/libcschem/project_act.c =================================================================== --- trunk/src/libcschem/project_act.c (revision 3516) +++ trunk/src/libcschem/project_act.c (revision 3517) @@ -68,3 +68,9 @@ { RND_REGISTER_ACTIONS(csch_project_act_list, project_cookie); } + +void csch_project_act_uninit(void) +{ + rnd_remove_actions_by_cookie(project_cookie); +} + Index: trunk/src/libcschem/project_act.h =================================================================== --- trunk/src/libcschem/project_act.h (revision 3516) +++ trunk/src/libcschem/project_act.h (revision 3517) @@ -1 +1,2 @@ void csch_project_act_init(void); +void csch_project_act_uninit(void);