From dbf4d595433ecefeb61f1267ffa515a91c3ab548 Mon Sep 17 00:00:00 2001 From: danieldg Date: Wed, 14 Oct 2009 22:12:55 +0000 Subject: Fix module unmapping with culled Module objects git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11875 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/inspircd.cpp | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) (limited to 'src/inspircd.cpp') diff --git a/src/inspircd.cpp b/src/inspircd.cpp index a1273d651..c59109724 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -111,22 +111,8 @@ void InspIRCd::Cleanup() Users->QuitUser(u, "Server shutdown"); } - /* We do this more than once, so that any service providers get a - * chance to be unhooked by the modules using them, but then get - * a chance to be removed themsleves. - * - * XXX there may be a better way to do this - */ - for (int tries = 0; tries < 4; tries++) - { - std::vector module_names = Modules->GetAllModuleNames(0); - for (std::vector::iterator k = module_names.begin(); k != module_names.end(); ++k) - { - /* Unload all modules, so they get a chance to clean up their listeners */ - this->Modules->Unload(k->c_str()); - } - GlobalCulls.Apply(); - } + GlobalCulls.Apply(); + Modules->UnloadAll(); /* Delete objects dynamically allocated in constructor (destructor would be more appropriate, but we're likely exiting) */ /* Must be deleted before modes as it decrements modelines */ @@ -788,7 +774,8 @@ int InspIRCd::Run() this->SE->DispatchEvents(); /* if any users were quit, take them out */ - this->GlobalCulls.Apply(); + GlobalCulls.Apply(); + AtomicActions.Run(); if (this->s_signal) { -- cgit v1.3.1-10-gc9f91