summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/_emerge/PollScheduler.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/pym/_emerge/PollScheduler.py b/pym/_emerge/PollScheduler.py
index 52a33772b..738dcc7f1 100644
--- a/pym/_emerge/PollScheduler.py
+++ b/pym/_emerge/PollScheduler.py
@@ -192,6 +192,19 @@ class PollScheduler(object):
def _unregister(self, reg_id):
f = self._poll_event_handler_ids[reg_id]
self._poll_obj.unregister(f)
+ if self._poll_event_queue:
+ # Discard any unhandled events that belong to this file,
+ # in order to prevent these events from being erroneously
+ # delivered to a future handler that is using a reallocated
+ # file descriptor of the same numeric value (causing
+ # extremely confusing bugs).
+ remove = set()
+ for event in self._poll_event_queue:
+ if event[0] == f:
+ remove.add(event)
+ if remove:
+ self._poll_event_queue[:] = [event for event in \
+ self._poll_event_queue if event not in remove]
del self._poll_event_handlers[f]
del self._poll_event_handler_ids[reg_id]