https://github.com/python/cpython/commit/8f82d9aa2191db7826bb7a453fe06ce65f966cf8
commit: 8f82d9aa2191db7826bb7a453fe06ce65f966cf8
branch: main
author: Jakub KulĂ­k <[email protected]>
committer: encukou <[email protected]>
date: 2024-09-19T14:47:05Z
summary:

bpo-41843: Reenable use of sendfile in shutil module on Solaris (GH-23893)

files:
A Misc/NEWS.d/next/Library/2020-12-22-18-08-12.bpo-41843.q9Nh2r.rst
M Doc/library/shutil.rst
M Lib/shutil.py

diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst
index 220207e5f3cbbf..e623c3df7beba6 100644
--- a/Doc/library/shutil.rst
+++ b/Doc/library/shutil.rst
@@ -517,7 +517,7 @@ the use of userspace buffers in Python as in 
"``outfd.write(infd.read())``".
 
 On macOS `fcopyfile`_ is used to copy the file content (not metadata).
 
-On Linux :func:`os.sendfile` is used.
+On Linux and Solaris :func:`os.sendfile` is used.
 
 On Windows :func:`shutil.copyfile` uses a bigger default buffer size (1 MiB
 instead of 64 KiB) and a :func:`memoryview`-based variant of
@@ -529,6 +529,9 @@ file then shutil will silently fallback on using less 
efficient
 
 .. versionchanged:: 3.8
 
+.. versionchanged:: 3.14
+    Solaris now uses :func:`os.sendfile`.
+
 .. _shutil-copytree-example:
 
 copytree example
diff --git a/Lib/shutil.py b/Lib/shutil.py
index 6037092a5e09f2..89c12b76b61dfc 100644
--- a/Lib/shutil.py
+++ b/Lib/shutil.py
@@ -48,7 +48,7 @@
 # This should never be removed, see rationale in:
 # https://bugs.python.org/issue43743#msg393429
 _USE_CP_SENDFILE = (hasattr(os, "sendfile")
-                    and sys.platform.startswith(("linux", "android")))
+                    and sys.platform.startswith(("linux", "android", 
"solaris")))
 _HAS_FCOPYFILE = posix and hasattr(posix, "_fcopyfile")  # macOS
 
 # CMD defaults in Windows 10
@@ -110,7 +110,7 @@ def _fastcopy_fcopyfile(fsrc, fdst, flags):
 def _fastcopy_sendfile(fsrc, fdst):
     """Copy data from one regular mmap-like fd to another by using
     high-performance sendfile(2) syscall.
-    This should work on Linux >= 2.6.33 only.
+    This should work on Linux >= 2.6.33, Android and Solaris.
     """
     # Note: copyfileobj() is left alone in order to not introduce any
     # unexpected breakage. Possible risks by using zero-copy calls
@@ -265,7 +265,7 @@ def copyfile(src, dst, *, follow_symlinks=True):
                             return dst
                         except _GiveupOnFastCopy:
                             pass
-                    # Linux
+                    # Linux / Android / Solaris
                     elif _USE_CP_SENDFILE:
                         try:
                             _fastcopy_sendfile(fsrc, fdst)
diff --git a/Misc/NEWS.d/next/Library/2020-12-22-18-08-12.bpo-41843.q9Nh2r.rst 
b/Misc/NEWS.d/next/Library/2020-12-22-18-08-12.bpo-41843.q9Nh2r.rst
new file mode 100644
index 00000000000000..4e525f7ed6a757
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-12-22-18-08-12.bpo-41843.q9Nh2r.rst
@@ -0,0 +1,2 @@
+Solaris now uses :func:`os.sendfile` fast-copy syscall for more efficient
+:mod:`shutil` file copy related functions.

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to