[Python-checkins] bpo-32622: Enforce sendfile fallback policy for FALLBACK transports (#5364)

Yury Selivanov webhook-mailer at python.org
Sat Jan 27 15:52:54 EST 2018


https://github.com/python/cpython/commit/b1a6ac4c4026d648b3d948945b734a4d0f175a3c
commit: b1a6ac4c4026d648b3d948945b734a4d0f175a3c
branch: master
author: Yury Selivanov <yury at magic.io>
committer: GitHub <noreply at github.com>
date: 2018年01月27日T15:52:52-05:00
summary:
bpo-32622: Enforce sendfile fallback policy for FALLBACK transports (#5364)
files:
M Lib/asyncio/base_events.py
M Lib/test/test_asyncio/test_events.py
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index f532dc42132..7442bf28b03 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -1035,7 +1035,12 @@ def _check_sendfile_params(self, sock, file, offset, count):
 except events.SendfileNotAvailableError as exc:
 if not fallback:
 raise
- # the mode is FALLBACK or fallback is True
+
+ if not fallback:
+ raise RuntimeError(
+ f"fallback is disabled and native sendfile is not "
+ f"supported for transport {transport!r}")
+
 return await self._sendfile_fallback(transport, file,
 offset, count)
 
diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py
index 0981bd6ac91..b66d91d415e 100644
--- a/Lib/test/test_asyncio/test_events.py
+++ b/Lib/test/test_asyncio/test_events.py
@@ -27,6 +27,7 @@
 
 import asyncio
 from asyncio import base_events
+from asyncio import constants
 from asyncio import coroutines
 from asyncio import events
 from asyncio import proactor_events
@@ -2381,6 +2382,14 @@ def test_sendfile_prevents_bare_write(self):
 ret = self.run_loop(t)
 self.assertEqual(ret, len(self.DATA))
 
+ def test_sendfile_no_fallback_for_fallback_transport(self):
+ transport = mock.Mock()
+ transport.is_closing.side_effect = lambda: False
+ transport._sendfile_compatible = constants._SendfileMode.FALLBACK
+ with self.assertRaisesRegex(RuntimeError, 'fallback is disabled'):
+ self.loop.run_until_complete(
+ self.loop.sendfile(transport, None, fallback=False))
+
 
 if sys.platform == 'win32':
 


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /