diff options
author | Zac Medico <zmedico@gentoo.org> | 2011-03-10 21:21:19 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2011-03-10 21:21:19 -0800 |
commit | 33946e6594e16d1c8ff493cf71b8587878ec7b29 (patch) | |
tree | 4a032d02760d7530d97c5d72067f3175253de891 | |
parent | c051b01974fbfb1471b3fc60f8152cbec0b3034f (diff) | |
download | portage-33946e6594e16d1c8ff493cf71b8587878ec7b29.tar.gz portage-33946e6594e16d1c8ff493cf71b8587878ec7b29.tar.bz2 portage-33946e6594e16d1c8ff493cf71b8587878ec7b29.zip |
PollScheduler: call _terminate_tasks in _schedule
This prevents it from being called while the _schedule_tasks()
implementation is running, in order to avoid potential interference.
-rw-r--r-- | pym/_emerge/PollScheduler.py | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/pym/_emerge/PollScheduler.py b/pym/_emerge/PollScheduler.py index a319066c0..94fd92407 100644 --- a/pym/_emerge/PollScheduler.py +++ b/pym/_emerge/PollScheduler.py @@ -57,9 +57,11 @@ class PollScheduler(object): def _terminate_tasks(self): """ Send signals to terminate all tasks. This is called once - from the event dispatching thread. All task should be - cleaned up at the earliest opportunity, but not necessarily - before this method returns. + from self._schedule() in the event dispatching thread. This + prevents it from being called while the _schedule_tasks() + implementation is running, in order to avoid potential + interference. All tasks should be cleaned up at the earliest + opportunity, but not necessarily before this method returns. """ raise NotImplementedError() @@ -74,6 +76,12 @@ class PollScheduler(object): return False self._scheduling = True try: + + if self._terminated.is_set() and \ + not self._terminated_tasks: + self._terminated_tasks = True + self._terminate_tasks() + return self._schedule_tasks() finally: self._scheduling = False @@ -145,10 +153,6 @@ class PollScheduler(object): raises StopIteration if timeout is None and there are no file descriptors to poll. """ - if self._terminated.is_set() and \ - not self._terminated_tasks: - self._terminated_tasks = True - self._terminate_tasks() if not self._poll_event_queue: self._poll(timeout) if not self._poll_event_queue: |