Make sure the certificate cache is flushed when plugins are unloaded.

This avoids segmentation faults when plugins implementing cert_t are
already unloaded when the cache is flushed during destruction.
This commit is contained in:
Tobias Brunner
2011-12-15 12:20:09 +01:00
parent 49b44c98c1
commit a5951a2861
3 changed files with 6 additions and 0 deletions
+2
View File
@@ -115,6 +115,8 @@ static void destroy(private_daemon_t *this)
DESTROY_IF(this->public.connect_manager);
DESTROY_IF(this->public.mediation_manager);
#endif /* ME */
/* make sure the cache is clear before unloading plugins */
lib->credmgr->flush_cache(lib->credmgr, CERT_ANY);
/* unload plugins to release threads */
lib->plugins->unload(lib->plugins);
#ifdef CAPABILITIES_LIBCAP
+3
View File
@@ -61,6 +61,9 @@ void library_deinit()
detailed = lib->settings->get_bool(lib->settings,
"libstrongswan.leak_detective.detailed", TRUE);
/* make sure the cache is clear before unloading plugins */
lib->credmgr->flush_cache(lib->credmgr, CERT_ANY);
this->public.scheduler->destroy(this->public.scheduler);
this->public.processor->destroy(this->public.processor);
this->public.plugins->destroy(this->public.plugins);
+1
View File
@@ -852,6 +852,7 @@ void exit_pluto(int status)
delete_lock();
options->destroy(options);
pluto_deinit();
lib->credmgr->flush_cache(lib->credmgr, CERT_ANY);
lib->plugins->unload(lib->plugins);
libhydra_deinit();
library_deinit();