diff options
author | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2005-11-30 05:45:03 +0000 |
---|---|---|
committer | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2005-11-30 05:45:03 +0000 |
commit | 7aded111763af65e78841e6604b21c590cbcd12b (patch) | |
tree | 238f18b7e602b7d42aea1f5f2d62f7a83a107151 /src | |
parent | 5a1a0994f56f09ff1df37a18025502ecf2a122ca (diff) |
Split the expiry loop into sections, to hopefully decrease time taken to expire with large amounts of *lines.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@2023 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r-- | src/xline.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/xline.cpp b/src/xline.cpp index 0f329602c..7a6db9a61 100644 --- a/src/xline.cpp +++ b/src/xline.cpp @@ -465,6 +465,12 @@ void expire_lines() // because we mess up an iterator when we remove from the vector, we must bail from // the loop early if we delete an item, therefore this outer while loop is required. + // + // 30/11/2005-- I can imagine that if we get a large number of *lines, this would perform dog slow. + // While we try and think of a better solution, for now I've simply split the loops up, instead of + // one huge while () -- this means if we remove a g-line, we only need to re-check glines, not z/g/. + // lines too, hopefully a little faster, even if it looks a little messier ;) --w00t + while (go_again) { go_again = false; @@ -479,6 +485,13 @@ void expire_lines() break; } } + } + + go_again = true; + + while (go_again) + { + go_again = false; for (std::vector<ELine>::iterator i = elines.begin(); i != elines.end(); i++) { @@ -490,6 +503,13 @@ void expire_lines() break; } } + } + + go_again = true; + + while (go_again) + { + go_again = false; for (std::vector<GLine>::iterator i = glines.begin(); i != glines.end(); i++) { @@ -501,6 +521,13 @@ void expire_lines() break; } } + } + + go_again = true; + + while (go_again) + { + go_again = false; for (std::vector<ZLine>::iterator i = zlines.begin(); i != zlines.end(); i++) { @@ -512,6 +539,14 @@ void expire_lines() break; } } + } + + go_again = true; + + + while (go_again) + { + go_again = false; for (std::vector<QLine>::iterator i = qlines.begin(); i != qlines.end(); i++) { |