]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/usermanager.cpp
Fix MySQL crash on module unload with empty query queue
[user/henk/code/inspircd.git] / src / usermanager.cpp
index 588af9510d28fc2f67cc1b7e55099f9f8db1dc7f..2d696c2a3d7a536e68643d57bc0c05c59b9e039b 100644 (file)
@@ -79,8 +79,6 @@ void UserManager::AddUser(int socket, ListenSocket* via, irc::sockets::sockaddrs
                return;
        }
 
-       FOREACH_MOD(I_OnUserInit,OnUserInit(New));
-
        /*
         * First class check. We do this again in FullConnect after DNS is done, and NICK/USER is recieved.
         * See my note down there for why this is required. DO NOT REMOVE. :) -- w00t
@@ -92,6 +90,8 @@ void UserManager::AddUser(int socket, ListenSocket* via, irc::sockets::sockaddrs
         * This will be done again after DNS resolution. -- w00t
         */
        New->CheckClass();
+       if (New->quitting)
+               return;
 
        /*
         * even with bancache, we still have to keep User::exempt current.
@@ -140,6 +140,10 @@ void UserManager::AddUser(int socket, ListenSocket* via, irc::sockets::sockaddrs
         * BOPM and other stuff requires it.
         */
        New->WriteServ("NOTICE Auth :*** Looking up your hostname...");
+       if (ServerInstance->Config->RawLog)
+               New->WriteServ("NOTICE Auth :*** Raw I/O logging is enabled on this server. All messages, passwords, and commands are being recorded.");
+
+       FOREACH_MOD(I_OnUserInit,OnUserInit(New));
 
        if (ServerInstance->Config->NoUserDns)
        {
@@ -195,22 +199,7 @@ void UserManager::QuitUser(User *user, const std::string &quitreason, const char
        {
                LocalUser* lu = IS_LOCAL(user);
                FOREACH_MOD(I_OnUserDisconnect,OnUserDisconnect(lu));
-               UserIOHandler* eh = &lu->eh;
-               eh->DoWrite();
-               if (eh->GetIOHook())
-               {
-                       try
-                       {
-                               eh->GetIOHook()->OnStreamSocketClose(eh);
-                       }
-                       catch (CoreException& modexcept)
-                       {
-                               ServerInstance->Logs->Log("USERS",DEBUG, "%s threw an exception: %s", modexcept.GetSource(), modexcept.GetReason());
-                       }
-               }
-
-               ServerInstance->SE->DelFd(eh);
-               eh->Close();
+               lu->eh.Close();
        }
 
        /*