From 20b31c2b688086abf5891879d73f0c6194f52392 Mon Sep 17 00:00:00 2001 From: brain Date: Tue, 24 Jun 2008 16:43:34 +0000 Subject: Module priority 'shuffler' suggestion from Phoenix, needs some testing but works ok for him git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9933 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/modules.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/modules.cpp b/src/modules.cpp index a45ec21ec..9c608cb82 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -332,7 +332,14 @@ bool ModuleManager::SetPriority(Module* mod, Implementation i, PriorityState s, /* Do we need to swap? */ if (swap && (swap_pos != source)) - std::swap(EventHandlers[i][swap_pos], EventHandlers[i][source]); + { + /* Suggestion from Phoenix, "shuffle" the modules to better retain call order */ + int incrmnt = 1; + if (source > swap_pos) + incrmnt = -1; + for (unsigned int j = source; j != swap_pos; j += incrmnt) + std::swap(EventHandlers[i][j], EventHandlers[i][j+incrmnt]); + } return true; } -- cgit v1.2.3