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:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user