From 24efb2a70dfd8aa100507612836601991e11affc Mon Sep 17 00:00:00 2001
From: Erik Johnston <erik@matrix.org>
Date: Sat, 15 Sep 2018 11:38:39 +0100
Subject: [PATCH] Fix timeout function

Turns out deferred.cancel sometimes throws, so we do that last to ensure
that we always do resolve the new deferred.
---
 synapse/util/async_helpers.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/synapse/util/async_helpers.py b/synapse/util/async_helpers.py
index 083e4f4128..40c2946129 100644
--- a/synapse/util/async_helpers.py
+++ b/synapse/util/async_helpers.py
@@ -456,11 +456,12 @@ def timeout_no_seriously(deferred, timeout, reactor):
 
     def time_it_out():
         timed_out[0] = True
-        deferred.cancel()
 
         if not new_d.called:
             new_d.errback(DeferredTimeoutError(timeout, "Deferred"))
 
+        deferred.cancel()
+
     delayed_call = reactor.callLater(timeout, time_it_out)
 
     def convert_cancelled(value):
-- 
GitLab