diff options
author | Yury Selivanov <yury@magic.io> | 2018-01-27 20:52:52 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-27 20:52:52 (GMT) |
commit | b1a6ac4c4026d648b3d948945b734a4d0f175a3c (patch) | |
tree | 6abf3b571d36187177b3dbae470f59a6f768a52a | |
parent | 7c684073f951dd891021676ecfd86ffc18b8895e (diff) | |
download | cpython-b1a6ac4c4026d648b3d948945b734a4d0f175a3c.zip cpython-b1a6ac4c4026d648b3d948945b734a4d0f175a3c.tar.gz cpython-b1a6ac4c4026d648b3d948945b734a4d0f175a3c.tar.bz2 |
bpo-32622: Enforce sendfile fallback policy for FALLBACK transports (#5364)
-rw-r--r-- | Lib/asyncio/base_events.py | 7 | ||||
-rw-r--r-- | Lib/test/test_asyncio/test_events.py | 9 |
2 files changed, 15 insertions, 1 deletions
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py index f532dc4..7442bf2 100644 --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -1035,7 +1035,12 @@ class BaseEventLoop(events.AbstractEventLoop): 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 0981bd6..b66d91d 100644 --- a/Lib/test/test_asyncio/test_events.py +++ b/Lib/test/test_asyncio/test_events.py @@ -27,6 +27,7 @@ if sys.platform != 'win32': 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 @@ class SendfileMixin: 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': |