]> granicus.if.org Git - python/commitdiff
Issue #23209, #23225: selectors.BaseSelector.get_key() now raises a
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 13 Jan 2015 09:00:55 +0000 (10:00 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Tue, 13 Jan 2015 09:00:55 +0000 (10:00 +0100)
RuntimeError if the selector is closed. And selectors.BaseSelector.close() now
clears its internal reference to the selector mapping to break a reference
cycle. Initial patch written by Martin Richard.

1  2 
Lib/selectors.py
Lib/test/test_selectors.py
Misc/NEWS

index 598845d43b02e9165ef35ae3f9826a66fcba2bfd,beb7ef7741142c71bfcbcd118dc2171cc4375ca8..6d569c30adff871c2346fb05d6ef0359432f7c54
@@@ -174,7 -174,9 +174,9 @@@ class BaseSelector(metaclass=ABCMeta)
          SelectorKey for this file object
          """
          mapping = self.get_map()
++        if mapping is None:
++            raise RuntimeError('Selector is closed')
          try:
 -            if mapping is None:
 -                raise KeyError
              return mapping[fileobj]
          except KeyError:
              raise KeyError("{!r} is not registered".format(fileobj)) from None
index 493a5a6d50cf5ea0bd6d034e23c224e110a1caea,dd30d441e6e9cee0108b1a5bc8783019d4e885e3..15f71c118317db4d0c1dad94fc65a8264b1425b1
@@@ -184,8 -187,10 +185,10 @@@ class BaseSelectorTestCase(unittest.Tes
          s.register(wr, selectors.EVENT_WRITE)
  
          s.close()
--        self.assertRaises(KeyError, s.get_key, rd)
--        self.assertRaises(KeyError, s.get_key, wr)
++        self.assertRaises(RuntimeError, s.get_key, rd)
++        self.assertRaises(RuntimeError, s.get_key, wr)
+         self.assertRaises(KeyError, mapping.__getitem__, rd)
+         self.assertRaises(KeyError, mapping.__getitem__, wr)
  
      def test_get_key(self):
          s = self.SELECTOR()
              sel.register(rd, selectors.EVENT_READ)
              sel.register(wr, selectors.EVENT_WRITE)
  
--        self.assertRaises(KeyError, s.get_key, rd)
--        self.assertRaises(KeyError, s.get_key, wr)
++        self.assertRaises(RuntimeError, s.get_key, rd)
++        self.assertRaises(RuntimeError, s.get_key, wr)
  
      def test_fileno(self):
          s = self.SELECTOR()
diff --cc Misc/NEWS
index ec2e74a792fb82a5a38b7f48475a8e6dc4f04496,96e34e496c533a2478e56f8439c7b9a1cf300ab1..04eb5a7aa7cfbed7ae13324f5b48f9905f524f1a
+++ b/Misc/NEWS
@@@ -203,24 -44,26 +203,29 @@@ Core and Builtin
  Library
  -------
  
 -- Issue #23209, #23225: selectors.BaseSelector.close() now clears its internal
 -  reference to the selector mapping to break a reference cycle. Initial patch
 -  written by Martin Richard.
++- Issue #23209, #23225: selectors.BaseSelector.get_key() now raises a
++  RuntimeError if the selector is closed. And selectors.BaseSelector.close()
++  now clears its internal reference to the selector mapping to break a
++  reference cycle. Initial patch written by Martin Richard.
 -- Issue #21356: Make ssl.RAND_egd() optional to support LibreSSL. The
 -  availability of the function is checked during the compilation. Patch written
 -  by Bernard Spil.
 +- Issue #19777: Provide a home() classmethod on Path objects.  Contributed
 +  by Victor Salgado and Mayank Tripathi.
  
 -- Issue #20896, #22935: The :func:`ssl.get_server_certificate` function now
 -  uses the :data:`~ssl.PROTOCOL_SSLv23` protocol by default, not
 -  :data:`~ssl.PROTOCOL_SSLv3`, for maximum compatibility and support platforms
 -  where :data:`~ssl.PROTOCOL_SSLv3` support is disabled.
 +- Issue #23206: Make ``json.dumps(..., ensure_ascii=False)`` as fast as the
 +  default case of ``ensure_ascii=True``.  Patch by Naoki Inada.
  
 -- Issue #23111: In the ftplib, make ssl.PROTOCOL_SSLv23 the default protocol
 -  version.
 +- Issue #23185: Add math.inf and math.nan constants.
  
 -- Issue #23132: Mitigate regression in speed and clarity in functools.total_ordering.
 +- Issue #23186: Add ssl.SSLObject.shared_ciphers() and
 +  ssl.SSLSocket.shared_ciphers() to fetch the client's list ciphers sent at
 +  handshake.
  
 -- Issue #22585: On OpenBSD 5.6 and newer, os.urandom() now calls getentropy(),
 -  instead of reading /dev/urandom, to get pseudo-random bytes.
 +- Issue #23143: Remove compatibility with OpenSSLs older than 0.9.8.
 +
 +- Issue #23132: Improve performance and introspection support of comparison
 +  methods created by functool.total_ordering.
 +
 +- Issue #19776: Add a expanduser() method on Path objects.
  
  - Issue #23112: Fix SimpleHTTPServer to correctly carry the query string and
    fragment when it redirects to add a trailing slash.