summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2008-01-09 12:20:21 +0000
committerw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2008-01-09 12:20:21 +0000
commit6f84254ed6681c79d606679cecb9420d394c8c47 (patch)
treeae04cac3da6e7bb459fbe0d4ee323c65476c62d3 /src
parent5f90329e3053edb1cf85a2bad521a6b2cf3e1256 (diff)
Add OnExpireLine(XLine *) hook, will be used in xline db stuff to avoid getting a fucked up vector
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8676 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r--src/modules.cpp1
-rw-r--r--src/xline.cpp28
2 files changed, 16 insertions, 13 deletions
diff --git a/src/modules.cpp b/src/modules.cpp
index 2233c985d..a699cb41b 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -180,6 +180,7 @@ void Module::OnChangeHost(User*, const std::string&) { }
void Module::OnChangeName(User*, const std::string&) { }
void Module::OnAddLine(User*, XLine*) { }
void Module::OnDelLine(User*, XLine*) { }
+void Module::OnExpireLine(XLine*) { }
void Module::OnCleanup(int, void*) { }
int Module::OnChannelPreDelete(Channel*) { return 0; }
void Module::OnChannelDelete(Channel*) { }
diff --git a/src/xline.cpp b/src/xline.cpp
index a77f7dc0b..1dda8dac0 100644
--- a/src/xline.cpp
+++ b/src/xline.cpp
@@ -289,19 +289,21 @@ XLine* XLineManager::MatchesLine(const std::string &type, const std::string &pat
// removes lines that have expired
void XLineManager::ExpireLine(ContainerIter container, LookupIter item)
{
- item->second->DisplayExpiry();
- item->second->Unset();
-
- /* TODO: Can we skip this loop by having a 'pending' field in the XLine class, which is set when a line
- * is pending, cleared when it is no longer pending, so we skip over this loop if its not pending?
- * -- Brain
- */
- std::vector<XLine*>::iterator pptr = std::find(pending_lines.begin(), pending_lines.end(), item->second);
- if (pptr != pending_lines.end())
- pending_lines.erase(pptr);
-
- delete item->second;
- container->second.erase(item);
+ FOREACH_MOD(I_OnExpireLine, OnExpireLine(item->second));
+
+ item->second->DisplayExpiry();
+ item->second->Unset();
+
+ /* TODO: Can we skip this loop by having a 'pending' field in the XLine class, which is set when a line
+ * is pending, cleared when it is no longer pending, so we skip over this loop if its not pending?
+ * -- Brain
+ */
+ std::vector<XLine*>::iterator pptr = std::find(pending_lines.begin(), pending_lines.end(), item->second);
+ if (pptr != pending_lines.end())
+ pending_lines.erase(pptr);
+
+ delete item->second;
+ container->second.erase(item);
}