summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Misc/NEWS.d/next/Windows/2024-02-27-23-21-55.gh-issue-116012.B9_IwM.rst1
-rw-r--r--Python/pystate.c9
-rw-r--r--Python/thread_nt.h7
3 files changed, 7 insertions, 10 deletions
diff --git a/Misc/NEWS.d/next/Windows/2024-02-27-23-21-55.gh-issue-116012.B9_IwM.rst b/Misc/NEWS.d/next/Windows/2024-02-27-23-21-55.gh-issue-116012.B9_IwM.rst
new file mode 100644
index 0000000..a55e5b1
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2024-02-27-23-21-55.gh-issue-116012.B9_IwM.rst
@@ -0,0 +1 @@
+Ensure the value of ``GetLastError()`` is preserved across GIL operations.
diff --git a/Python/pystate.c b/Python/pystate.c
index a80c1b7..a370fff 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -2528,16 +2528,7 @@ PyGILState_Check(void)
return 0;
}
-#ifdef MS_WINDOWS
- int err = GetLastError();
-#endif
-
PyThreadState *tcur = gilstate_tss_get(runtime);
-
-#ifdef MS_WINDOWS
- SetLastError(err);
-#endif
-
return (tstate == tcur);
}
diff --git a/Python/thread_nt.h b/Python/thread_nt.h
index 7922b2d..9dca833 100644
--- a/Python/thread_nt.h
+++ b/Python/thread_nt.h
@@ -513,5 +513,10 @@ void *
PyThread_tss_get(Py_tss_t *key)
{
assert(key != NULL);
- return TlsGetValue(key->_key);
+ int err = GetLastError();
+ void *r = TlsGetValue(key->_key);
+ if (r || !GetLastError()) {
+ SetLastError(err);
+ }
+ return r;
}