]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/bancache.cpp
m_spanningtree Remove duplicate code for sending channel messages from RouteCommand()
[user/henk/code/inspircd.git] / src / bancache.cpp
index 784f5ded611c4a3db911ca3043048b9b9bdd2505..4bb2fa82c4c460c27f201edbc2c7c9610dd3363d 100644 (file)
@@ -18,8 +18,6 @@
  */
 
 
-/* $Core */
-
 #include "inspircd.h"
 #include "bancache.h"
 
@@ -39,29 +37,36 @@ BanCacheHit *BanCacheManager::GetHit(const std::string &ip)
 
        if (i == this->BanHash->end())
                return NULL; // free and safe
-       else
-       {
-               if (ServerInstance->Time() > i->second->Expiry)
-               {
-                       ServerInstance->Logs->Log("BANCACHE", DEBUG, "Hit on " + ip + " is out of date, removing!");
-                       delete i->second;
-                       BanHash->erase(i);
-                       return NULL; // out of date
-               }
 
-               return i->second; // hit.
-       }
+       if (RemoveIfExpired(i))
+               return NULL; // expired
+
+       return i->second; // hit.
+}
+
+bool BanCacheManager::RemoveIfExpired(BanCacheHash::iterator& it)
+{
+       if (ServerInstance->Time() < it->second->Expiry)
+               return false;
+
+       ServerInstance->Logs->Log("BANCACHE", LOG_DEBUG, "Hit on " + it->first + " is out of date, removing!");
+       delete it->second;
+       it = BanHash->erase(it);
+       return true;
 }
 
 void BanCacheManager::RemoveEntries(const std::string& type, bool positive)
 {
        if (positive)
-               ServerInstance->Logs->Log("BANCACHE", DEBUG, "BanCacheManager::RemoveEntries(): Removing positive hits for " + type);
+               ServerInstance->Logs->Log("BANCACHE", LOG_DEBUG, "BanCacheManager::RemoveEntries(): Removing positive hits for " + type);
        else
-               ServerInstance->Logs->Log("BANCACHE", DEBUG, "BanCacheManager::RemoveEntries(): Removing all negative hits");
+               ServerInstance->Logs->Log("BANCACHE", LOG_DEBUG, "BanCacheManager::RemoveEntries(): Removing all negative hits");
 
        for (BanCacheHash::iterator i = BanHash->begin(); i != BanHash->end(); )
        {
+               if (RemoveIfExpired(i))
+                       continue; // updates the iterator if expired
+
                BanCacheHit* b = i->second;
                bool remove = false;
 
@@ -79,7 +84,7 @@ void BanCacheManager::RemoveEntries(const std::string& type, bool positive)
                if (remove)
                {
                        /* we need to remove this one. */
-                       ServerInstance->Logs->Log("BANCACHE", DEBUG, "BanCacheManager::RemoveEntries(): Removing a hit on " + i->first);
+                       ServerInstance->Logs->Log("BANCACHE", LOG_DEBUG, "BanCacheManager::RemoveEntries(): Removing a hit on " + i->first);
                        delete b;
                        i = BanHash->erase(i);
                }