Message170050
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 |
|
Date |
User |
Action |
Args |
2012-09-08 13:35:03 | christian.heimes | set | recipients:
+ christian.heimes, loewis, georg.brandl, pitrou |
2012-09-08 13:35:02 | christian.heimes | set | messageid: <1347111302.92.0.306708953598.issue15883@psf.upfronthosting.co.za> |
2012-09-08 13:35:01 | christian.heimes | link | issue15883 messages |
2012-09-08 13:35:01 | christian.heimes | create | |
|