From 8b90cdd73f392d9e6aba3a15d2b3df9b4d70f336 Mon Sep 17 00:00:00 2001
From: mathieui <mathieui@mathieui.net>
Date: Fri, 30 Apr 2021 18:40:33 +0200
Subject: xmlstream: fix slow tasks scheduling

- wrong attribute used
- some mistakes in the slow tasks function
---
 slixmpp/xmlstream/xmlstream.py | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/slixmpp/xmlstream/xmlstream.py b/slixmpp/xmlstream/xmlstream.py
index 5074aa8c..b5b78b31 100644
--- a/slixmpp/xmlstream/xmlstream.py
+++ b/slixmpp/xmlstream/xmlstream.py
@@ -1007,11 +1007,13 @@ class XMLStream(asyncio.BaseProtocol):
         """
         data = await task
         self.__slow_tasks.remove(task)
-        for filter in self.__filters['out']:
+        if data is None:
+            return
+        for filter in self.__filters['out'][:]:
             if filter in already_used:
                 continue
             if iscoroutinefunction(filter):
-                data = await task
+                data = await filter(data)
             else:
                 data = filter(data)
             if data is None:
@@ -1047,7 +1049,7 @@ class XMLStream(asyncio.BaseProtocol):
                                     timeout=1,
                                 )
                                 if pending:
-                                    self.slow_tasks.append(task)
+                                    self.__slow_tasks.append(task)
                                     asyncio.ensure_future(
                                         self._continue_slow_send(
                                             task,
@@ -1055,7 +1057,9 @@ class XMLStream(asyncio.BaseProtocol):
                                         ),
                                         loop=self.loop,
                                     )
-                                    raise Exception("Slow coro, rescheduling")
+                                    raise ContinueQueue(
+                                        "Slow coroutine, rescheduling filters"
+                                    )
                                 data = task.result()
                             else:
                                 data = filter(data)
-- 
cgit v1.2.3