]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-44098: Release the GIL during mmap on Unix (GH-98146)
authorShantanu <12621235+hauntsaninja@users.noreply.github.com>
Mon, 10 Oct 2022 22:14:31 +0000 (15:14 -0700)
committerGitHub <noreply@github.com>
Mon, 10 Oct 2022 22:14:31 +0000 (15:14 -0700)
This seems pretty straightforward. The issue mentions other calls in mmapmodule that we could release the GIL on, but those are in methods where we'd need to be careful to ensure that something sensible happens if those are called concurrently. In prior art, note that #12073 released the GIL for munmap.  In a toy benchmark, I see the speedup you'd expect from doing this.

Automerge-Triggered-By: GH:gvanrossum
Misc/NEWS.d/next/Library/2022-10-10-09-52-21.gh-issue-44098.okcqJt.rst [new file with mode: 0644]
Modules/mmapmodule.c

diff --git a/Misc/NEWS.d/next/Library/2022-10-10-09-52-21.gh-issue-44098.okcqJt.rst b/Misc/NEWS.d/next/Library/2022-10-10-09-52-21.gh-issue-44098.okcqJt.rst
new file mode 100644 (file)
index 0000000..4efea4a
--- /dev/null
@@ -0,0 +1 @@
+Release the GIL when creating :class:`mmap.mmap` objects on Unix.
index 5c05aa738ef564e67f354d9dde69d6cf27b3db07..fdce783fdec5e2d260c0bc4114322d44a022331c 100644 (file)
@@ -1318,9 +1318,9 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
         }
     }
 
-    m_obj->data = mmap(NULL, map_size,
-                       prot, flags,
-                       fd, offset);
+    Py_BEGIN_ALLOW_THREADS
+    m_obj->data = mmap(NULL, map_size, prot, flags, fd, offset);
+    Py_END_ALLOW_THREADS
 
     if (devzero != -1) {
         close(devzero);