[Python-checkins] gh-102141: replace use of getpid on Windows with GetCurrentProcessId (GH-102142)

zooba webhook-mailer at python.org
Fri Feb 24 07:38:29 EST 2023


https://github.com/python/cpython/commit/1fa38906f0b228e6b0a6baa89ab6316989b0388a
commit: 1fa38906f0b228e6b0a6baa89ab6316989b0388a
branch: main
author: Max Bachmann <kontakt at maxbachmann.de>
committer: zooba <steve.dower at microsoft.com>
date: 2023-02-24T12:38:21Z
summary:

gh-102141: replace use of getpid on Windows with GetCurrentProcessId (GH-102142)

files:
A Misc/NEWS.d/next/Core and Builtins/2023-02-22-15-15-32.gh-issue-102027.Km4G-d.rst
M Modules/_randommodule.c
M Modules/posixmodule.c
M PC/pyconfig.h

diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-02-22-15-15-32.gh-issue-102027.Km4G-d.rst b/Misc/NEWS.d/next/Core and Builtins/2023-02-22-15-15-32.gh-issue-102027.Km4G-d.rst
new file mode 100644
index 000000000000..514a8ef26594
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2023-02-22-15-15-32.gh-issue-102027.Km4G-d.rst	
@@ -0,0 +1,2 @@
+Use ``GetCurrentProcessId`` on Windows when ``getpid`` is unavailable. Patch by
+Max Bachmann.
diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c
index 95f1e505dd18..68060c07033d 100644
--- a/Modules/_randommodule.c
+++ b/Modules/_randommodule.c
@@ -259,7 +259,9 @@ random_seed_time_pid(RandomObject *self)
     key[0] = (uint32_t)(now & 0xffffffffU);
     key[1] = (uint32_t)(now >> 32);
 
-#ifdef HAVE_GETPID
+#ifdef MS_WINDOWS_NON_DESKTOP
+    key[2] = (uint32_t)GetCurrentProcessId();
+#elif defined(HAVE_GETPID)
     key[2] = (uint32_t)getpid();
 #else
     key[2] = 0;
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 524dc7eb1ccc..51aa89ef715a 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -7946,7 +7946,7 @@ os_getgid_impl(PyObject *module)
 #endif /* HAVE_GETGID */
 
 
-#ifdef HAVE_GETPID
+#if defined(HAVE_GETPID)
 /*[clinic input]
 os.getpid
 
@@ -7957,9 +7957,13 @@ static PyObject *
 os_getpid_impl(PyObject *module)
 /*[clinic end generated code: output=9ea6fdac01ed2b3c input=5a9a00f0ab68aa00]*/
 {
+#ifdef MS_WINDOWS_NON_DESKTOP
+    return PyLong_FromUnsignedLong(GetCurrentProcessId());
+#else
     return PyLong_FromPid(getpid());
+#endif
 }
-#endif /* HAVE_GETPID */
+#endif /* defined(HAVE_GETPID) */
 
 #ifdef NGROUPS_MAX
 #define MAX_GROUPS NGROUPS_MAX
@@ -8265,12 +8269,11 @@ static PyObject*
 win32_getppid()
 {
     HANDLE snapshot;
-    pid_t mypid;
     PyObject* result = NULL;
     BOOL have_record;
     PROCESSENTRY32 pe;
 
-    mypid = getpid(); /* This function never fails */
+    DWORD mypid = GetCurrentProcessId(); /* This function never fails */
 
     snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
     if (snapshot == INVALID_HANDLE_VALUE)
@@ -8279,9 +8282,9 @@ win32_getppid()
     pe.dwSize = sizeof(pe);
     have_record = Process32First(snapshot, &pe);
     while (have_record) {
-        if (mypid == (pid_t)pe.th32ProcessID) {
+        if (mypid == pe.th32ProcessID) {
             /* We could cache the ulong value in a static variable. */
-            result = PyLong_FromPid((pid_t)pe.th32ParentProcessID);
+            result = PyLong_FromUnsignedLong(pe.th32ParentProcessID);
             break;
         }
 
diff --git a/PC/pyconfig.h b/PC/pyconfig.h
index f5166a1506c9..a34d420ab7ec 100644
--- a/PC/pyconfig.h
+++ b/PC/pyconfig.h
@@ -72,6 +72,9 @@ WIN32 is still required for the locale module.
 #define USE_SOCKET
 #endif
 
+#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP)
+#define MS_WINDOWS_NON_DESKTOP
+#endif
 
 /* Compiler specific defines */
 



More information about the Python-checkins mailing list