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

This commit is contained in:
Max Bachmann 2023-02-24 13:38:21 +01:00 committed by GitHub
parent 347f7406df
commit 1fa38906f0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 7 deletions

View file

@ -0,0 +1,2 @@
Use ``GetCurrentProcessId`` on Windows when ``getpid`` is unavailable. Patch by
Max Bachmann.

View file

@ -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;

View file

@ -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;
}

View file

@ -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 */