From: Kristján Valur Jónsson Date: Sat, 10 Jan 2009 12:14:31 +0000 (+0000) Subject: Issue 4906: Preserve windows error state across PyThread_get_key_value X-Git-Tag: v2.7a1~2342 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=abb70e9c9f79dd26e71368f9aab77ad72d0706bc;p=thirdparty%2FPython%2Fcpython.git Issue 4906: Preserve windows error state across PyThread_get_key_value --- diff --git a/Python/thread_nt.h b/Python/thread_nt.h index 5ec15f6a9319..e0457a2486d4 100644 --- a/Python/thread_nt.h +++ b/Python/thread_nt.h @@ -315,7 +315,16 @@ PyThread_set_key_value(int key, void *value) 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