[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