]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/userprocess.cpp
Removal of ancient TRUE/FALSE #defines (C-ish stuff)
[user/henk/code/inspircd.git] / src / userprocess.cpp
index 846dcaeee52c6315e9baf53050623a2cd047b4f1..00b08689389a697892bd30e9cf05e7e96c21356a 100644 (file)
@@ -70,6 +70,7 @@ extern std::vector<InspSocket*> module_sockets;
 extern time_t TIME;
 extern time_t OLDTIME;
 extern std::vector<userrec*> local_users;
+extern InspSocket* socket_ref[MAX_DESCRIPTORS];
 char LOG_FILE[MAXBUF];
 
 extern InspIRCd* ServerInstance;
@@ -316,12 +317,13 @@ void DoSocketTimeouts(time_t TIME)
        for (std::vector<InspSocket*>::iterator a = module_sockets.begin(); a < module_sockets.end(); a++)
        {
                InspSocket* s = (InspSocket*)*a;
-               if (s->Timeout(TIME))
+               if ((s) && (socket_ref[s->GetFd()] != NULL) && (s->Timeout(TIME)))
                {
-                       log(DEBUG,"Socket poll returned false, close and bail");
+                       log(DEBUG,"userprocess.cpp: Socket poll returned false, close and bail");
+                       socket_ref[s->GetFd()] = NULL;
                        SE->DelFd(s->GetFd());
-                       s->Close();
                        module_sockets.erase(a);
+                       s->Close();
                        delete s;
                        break;
                }
@@ -339,7 +341,7 @@ void DoSocketTimeouts(time_t TIME)
  */
 void DoBackgroundUserStuff(time_t TIME)
 {
-       CullList* GlobalGoners = new CullList();
+       CullList GlobalGoners;
 
        for (std::vector<userrec*>::iterator count2 = local_users.begin(); count2 != local_users.end(); count2++)
        {
@@ -360,7 +362,7 @@ void DoBackgroundUserStuff(time_t TIME)
                        if (((unsigned)TIME > (unsigned)curr->timeout) && (curr->registered != 7))
                        {
                                log(DEBUG,"InspIRCd: registration timeout: %s",curr->nick);
-                               GlobalGoners->AddItem(curr,"Registration timeout");
+                               GlobalGoners.AddItem(curr,"Registration timeout");
                                continue;
                        }
 
@@ -372,14 +374,14 @@ void DoBackgroundUserStuff(time_t TIME)
                        {
                                curr->dns_done = true;
                                ServerInstance->stats->statsDnsBad++;
-                               FullConnectUser(curr,GlobalGoners);
+                               FullConnectUser(curr,&GlobalGoners);
                                continue;
                        }
 
                        if ((curr->dns_done) && (curr->registered == 3) && (AllModulesReportReady(curr)))
                        {
                                log(DEBUG,"dns done, registered=3, and modules ready, OK");
-                               FullConnectUser(curr,GlobalGoners);
+                               FullConnectUser(curr,&GlobalGoners);
                                continue;
                        }
 
@@ -389,7 +391,7 @@ void DoBackgroundUserStuff(time_t TIME)
                                // This user didn't answer the last ping, remove them
                                if (!curr->lastping)
                                {
-                                       GlobalGoners->AddItem(curr,"Ping timeout");
+                                       GlobalGoners.AddItem(curr,"Ping timeout");
                                        continue;
                                }
 
@@ -404,18 +406,16 @@ void DoBackgroundUserStuff(time_t TIME)
                         */
                        curr->FlushWriteBuf();
 
-                       if (curr->GetWriteError() != "")
+                       if (*curr->GetWriteError())
                        {
-                               GlobalGoners->AddItem(curr,curr->GetWriteError());
+                               GlobalGoners.AddItem(curr,curr->GetWriteError());
                                continue;
                        }
                }
        }
 
        /* Remove all the queued users who are due to be quit, free memory used. */
-       GlobalGoners->Apply();
-       delete GlobalGoners;
-       return;
+       GlobalGoners.Apply();
 }
 
 void OpenLog(char** argv, int argc)
@@ -475,6 +475,7 @@ void CheckDie()
 void LoadAllModules(InspIRCd* ServerInstance)
 {
        char configToken[MAXBUF];
+       Config->module_names.clear();
 
        MODCOUNT = -1;