that your assessment is correct. Here is a cleaner solution (this is based on dl_cleanup() from SVN, not the 0.9.28.3 version): void dl_cleanup(void) { struct dyn_elf *d; struct dyn_elf *n; for (d =3D _dl_handles; d; d =3D n) { n =3D d->next_handle; do_dlclose(d, 1); } } //Peter