]> granicus.if.org Git - python/commitdiff
bpo-37279: Fix asyncio sendfile support when extra data are sent in fallback mode...
authorAndrew Svetlov <andrew.svetlov@gmail.com>
Sat, 15 Jun 2019 11:05:08 +0000 (14:05 +0300)
committerGitHub <noreply@github.com>
Sat, 15 Jun 2019 11:05:08 +0000 (14:05 +0300)
Lib/asyncio/base_events.py
Lib/test/test_asyncio/test_sendfile.py
Misc/NEWS.d/next/Library/2019-06-14-13-25-56.bpo-37279.OHlW6l.rst [new file with mode: 0644]

index e0025397fa8a85c883341e878371ec57854167f1..90de8587a3bb98b61b217c2a5b57ac7e5148e537 100644 (file)
@@ -861,7 +861,7 @@ class BaseEventLoop(events.AbstractEventLoop):
                 read = await self.run_in_executor(None, file.readinto, view)
                 if not read:
                     break  # EOF
-                await self.sock_sendall(sock, view)
+                await self.sock_sendall(sock, view[:read])
                 total_sent += read
             return total_sent
         finally:
@@ -1145,7 +1145,7 @@ class BaseEventLoop(events.AbstractEventLoop):
                 if not read:
                     return total_sent  # EOF
                 await proto.drain()
-                transp.write(view)
+                transp.write(view[:read])
                 total_sent += read
         finally:
             if total_sent > 0 and hasattr(file, 'seek'):
index f148fe27e6ad407b77ef9192c4b231279f338a4e..3b7f784c5ee3a01e4886eb27a437487bc317a6b9 100644 (file)
@@ -86,7 +86,8 @@ class MyProto(asyncio.Protocol):
 
 class SendfileBase:
 
-    DATA = b"SendfileBaseData" * (1024 * 8)  # 128 KiB
+      # 128 KiB plus small unaligned to buffer chunk
+    DATA = b"SendfileBaseData" * (1024 * 8 + 1)
 
     # Reduce socket buffer size to test on relative small data sets.
     BUF_SIZE = 4 * 1024   # 4 KiB
diff --git a/Misc/NEWS.d/next/Library/2019-06-14-13-25-56.bpo-37279.OHlW6l.rst b/Misc/NEWS.d/next/Library/2019-06-14-13-25-56.bpo-37279.OHlW6l.rst
new file mode 100644 (file)
index 0000000..d740b9b
--- /dev/null
@@ -0,0 +1,2 @@
+Fix asyncio sendfile support when sendfile sends extra data in fallback
+mode.