mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-32622: Enforce sendfile fallback policy for FALLBACK transports (#5364)
This commit is contained in:
parent
7c684073f9
commit
b1a6ac4c40
2 changed files with 15 additions and 1 deletions
|
@ -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)
|
||||
|
||||
|
|
|
@ -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':
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue