]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/inspircd.cpp
Fix null dereference caused by tracking dummy
[user/henk/code/inspircd.git] / src / inspircd.cpp
index a1273d651638a1821ca464da833881099b7db7ef..862aa31d093f26276d92e7db82d6c691c8616980 100644 (file)
@@ -83,11 +83,9 @@ const char* ExitCodes[] =
 
 template<typename T> static void DeleteZero(T*&n)
 {
-       if (n != NULL)
-       {
-               delete n;
-               n = NULL;
-       }
+       T* t = n;
+       n = NULL;
+       delete t;
 }
 
 void InspIRCd::Cleanup()
@@ -111,22 +109,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<std::string> module_names = Modules->GetAllModuleNames(0);
-               for (std::vector<std::string>::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 +772,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)
                {