Issue 4906:  Preserve windows error state across PyThread_get_key_value
diff --git a/Python/thread_nt.h b/Python/thread_nt.h
index 5ec15f6..e0457a2 100644
--- a/Python/thread_nt.h
+++ b/Python/thread_nt.h
@@ -315,7 +315,16 @@
 void *
 PyThread_get_key_value(int key)
 {
-	return TlsGetValue(key);
+	/* because TLS is used in the Py_END_ALLOW_THREAD macro,
+	 * it is necessary to preserve the windows error state, because
+	 * it is assumed to be preserved across the call to the macro.
+	 * Ideally, the macro should be fixed, but it is simpler to
+	 * do it here.
+	 */
+	DWORD error = GetLastError();
+	void *result = TlsGetValue(key);
+	SetLastError(error);
+	return result;
 }
 
 void