diff options
author | Zac Medico <zmedico@gentoo.org> | 2012-02-09 01:12:40 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2012-02-09 01:12:40 -0800 |
commit | 7a6c34cc6bd6eb20a97e05347f87a0157f4ae58a (patch) | |
tree | d392511c57319c79f8e5d60c0a399b1ed80e2cd5 | |
parent | 31fc2c97563eaa57ebf890d728f45f859c5520bf (diff) | |
download | portage-7a6c34cc6bd6eb20a97e05347f87a0157f4ae58a.tar.gz portage-7a6c34cc6bd6eb20a97e05347f87a0157f4ae58a.tar.bz2 portage-7a6c34cc6bd6eb20a97e05347f87a0157f4ae58a.zip |
AsynchronousTask: exit listeners reverse order
This should fix a Scheduler hang which is triggered when that merge
queue, a SequentialTaskQueue, doesn't decrement its merge count until
after other exit listeners have already run.
-rw-r--r-- | pym/_emerge/AsynchronousTask.py | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/pym/_emerge/AsynchronousTask.py b/pym/_emerge/AsynchronousTask.py index 4aa598085..d57ccab2b 100644 --- a/pym/_emerge/AsynchronousTask.py +++ b/pym/_emerge/AsynchronousTask.py @@ -129,7 +129,11 @@ class AsynchronousTask(SlotObject): self._exit_listener_stack = self._exit_listeners self._exit_listeners = None - self._exit_listener_stack.reverse() + # Execute exit listeners in reverse order, so that + # the last added listener is executed first. This + # allows SequentialTaskQueue to decrement its running + # task count as soon as one of its tasks exits, so that + # the value is accurate when other listeners execute. while self._exit_listener_stack: self._exit_listener_stack.pop()(self) |