From b8cdec92c77f741aaafa3655e7f4959db7889a3d Mon Sep 17 00:00:00 2001
From: Erik Johnston <erik@matrix.org>
Date: Thu, 18 Feb 2016 16:33:07 +0000
Subject: [PATCH] WheelTimer: Don't scan list, use index.

---
 synapse/util/wheel_timer.py | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/synapse/util/wheel_timer.py b/synapse/util/wheel_timer.py
index b447b2456c..2c9f957616 100644
--- a/synapse/util/wheel_timer.py
+++ b/synapse/util/wheel_timer.py
@@ -46,11 +46,14 @@ class WheelTimer(object):
             then (int): When to return the object strictly after.
         """
         then_key = int(then / self.bucket_size) + 1
-        for entry in self.entries:
-            # Add to first bucket we find. This should gracefully handle inserts
-            # for times in the past.
-            if entry.end_key >= then_key:
-                entry.queue.append(obj)
+
+        if self.entries:
+            min_key = self.entries[0].end_key
+            max_key = self.entries[-1].end_key
+
+            if then_key <= max_key:
+                # The max here is to protect against inserts for times in the past
+                self.entries[max(min_key, then_key) - min_key].queue.append(obj)
                 return
 
         next_key = int(now / self.bucket_size) + 1
-- 
GitLab