[Python-Dev] Py_END_ALLOW_THREADS and GetLastError()
Hirokazu Yamamoto
ocean-city at m2.ccsnet.ne.jp
Sat Jan 10 12:41:34 CET 2009
Kristján Valur Jónsson wrote:
> Currently on Windows, Py_END_ALLOW_THREADS can have the side effect of
> resetting the windows error code returned by GetLastError().
>
> There is a number of cases, particularly in posixmodule, with a pattern
> like:
>
> Py_BEGIN_ALLOW_THREADS
>
> result = FindNextFile(hFindFile, &FileData);
>
> Py_END_ALLOW_THREADS
>
> /* FindNextFile sets error to ERROR_NO_MORE_FILES if
>
> it got to the end of the directory. */
>
> if (!result && GetLastError() != ERROR_NO_MORE_FILES) {
>
>
>
> That doesn´t work. (This particular site is where I noticed the
> problem, running the testsuite in a debug build).
>
> Now, the thread swith macro does take care to preserve „errno“, but not
> the windows system error. This is easy to add, but it requires that
> windows.h be included by ceval.c and pystate.c
>
> The alternative fix is to find all these cases and manually preserve the
> error state, or query it right after the function call if needed.
>
> Any preferences?
Please see http://bugs.python.org/issue4906 :-)
More information about the Python-Dev
mailing list