[New-bugs-announce] [issue15883] Add Py_errno to work around multiple CRT issue

Christian Heimes report at bugs.python.org
Sat Sep 8 15:35:02 CEST 2012


New submission from Christian Heimes:

errno is usually implemented as thread local variable, more precisely as a macro that calls a function which returns the memory address of a thread local variable. Each C runtime library has its own function and TLS which introduces an issue when a Python extension uses a different CRT than the core. AFAIK that an issue only an issue on Windows with other versions of Visual Studio.

This means that mixed CRTs break the three PyErr_SetFromErrno* functions as they always access the errno of the core's CRT. The patch adds a Py_errno macro that must be used in extensions before a PyErr_SetFromErrno() function is used.

Example:
fd = open(filename, O_RDONLY);
if (fd == -1) {
    Py_errno = errno;
    return PyErr_SetFromErrnoWithFilename(PyExc_OSError, filename);
}

The issue was discovered by me a about two weeks ago and further analyzed by Martin. http://mail.python.org/pipermail/python-dev/2012-August/121460.html

----------
components: Build, Extension Modules, Interpreter Core
files: pyerrno.patch
keywords: patch
messages: 170050
nosy: christian.heimes, georg.brandl, loewis, pitrou
priority: normal
severity: normal
stage: patch review
status: open
title: Add Py_errno to work around multiple CRT issue
type: behavior
versions: Python 3.3, Python 3.4
Added file: http://bugs.python.org/file27148/pyerrno.patch

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue15883>
_______________________________________


More information about the New-bugs-announce mailing list