commit:     0f8e3cd3cc695e721a8b1f7cfc56c53aca19fe4d
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Tue Apr 17 06:20:45 2018 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Apr 17 06:20:45 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=0f8e3cd3

EventLoop._run_idle_callbacks: make recursive callbacks fatal

The caller should use call_soon in order to prevent recursion
here. Raise an error because recursive calls would make the
remaining count for this loop meaningless.

Fixes: 9772f8f2a58a (EventLoop._idle_add: use thread-safe deque append)

 pym/portage/util/_eventloop/EventLoop.py | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/pym/portage/util/_eventloop/EventLoop.py 
b/pym/portage/util/_eventloop/EventLoop.py
index d4f20c6ed..c38a4defd 100644
--- a/pym/portage/util/_eventloop/EventLoop.py
+++ b/pym/portage/util/_eventloop/EventLoop.py
@@ -546,8 +546,11 @@ class EventLoop(object):
                                        # it got cancelled while executing 
another callback
                                        continue
                                if x._calling:
-                                       # don't call it recursively
-                                       continue
+                                       # The caller should use call_soon in 
order to prevent
+                                       # recursion here. Raise an error 
because recursive
+                                       # calls would make the remaining count 
for this loop
+                                       # meaningless.
+                                       raise AssertionError('recursive idle 
callback')
                                x._calling = True
                                try:
                                        if x._callback(*x._args):

Reply via email to