diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py
index 2b09a410f4f7cbcd12fcd874ccfafbf9dd821859..4a543a397690038297419452907101ad6b693952 100644
--- a/synapse/handlers/federation.py
+++ b/synapse/handlers/federation.py
@@ -232,7 +232,11 @@ class FederationHandler(BaseHandler):
         d = defer.Deferred()
         self.waiting_for_join_list.setdefault((joinee, room_id), []).append(d)
         reactor.callLater(10, d.cancel)
-        yield d
+
+        try:
+            yield d
+        except defer.CancelledError:
+            raise SynapseError("500", "Unable to join remote room")
 
         try:
             yield self.store.store_room(