diff --git a/Lib/selectors.py b/Lib/selectors.py index bb15a1cb1ba..5895b48171f 100644 --- a/Lib/selectors.py +++ b/Lib/selectors.py @@ -210,8 +210,7 @@ class _BaseSelectorImpl(BaseSelector): def __init__(self): # this maps file descriptors to keys self._fd_to_key = {} - # read-only mapping returned by get_map() - self._map = _SelectorMapping(self) + self._closed = False def _fileobj_lookup(self, fileobj): """Return a file descriptor from a file object. @@ -268,10 +267,13 @@ def modify(self, fileobj, events, data=None): def close(self): self._fd_to_key.clear() - self._map = None + self._closed = True def get_map(self): - return self._map + # read-only mapping returned by get_map() + if self._closed: + return None + return _SelectorMapping(self) def _key_from_fd(self, fd): """Return the key associated to a given file descriptor. diff --git a/Lib/test/test_selectors.py b/Lib/test/test_selectors.py index 3a3f87760a9..daadbcb6884 100644 --- a/Lib/test/test_selectors.py +++ b/Lib/test/test_selectors.py @@ -198,10 +198,10 @@ def test_modify_unregister(self): self.addCleanup(s.close) rd, wr = self.make_socketpair() s.register(rd, selectors.EVENT_READ) - self.assertEqual(len(s._map), 1) + self.assertEqual(len(s.get_map()), 1) with self.assertRaises(ZeroDivisionError): s.modify(rd, selectors.EVENT_WRITE) - self.assertEqual(len(s._map), 0) + self.assertEqual(len(s.get_map()), 0) def test_close(self): s = self.SELECTOR()