Staging
v0.8.1
v0.8.1
https://github.com/python/cpython
Revision e70c3378c039cae30cd9ae559c4bdeb923254c43 authored by Thomas Heller on 04 June 2008, 18:59:03 UTC, committed by Thomas Heller on 04 June 2008, 18:59:03 UTC
errno (and LastError, on Windows). ctypes maintains a module-global, but thread-local, variable that contains an error number; called 'ctypes_errno' for this discussion. This variable is a private copy of the systems 'errno' value; the copy is swapped with the 'errno' variable on several occasions. Foreign functions created with CDLL(..., use_errno=True), when called, swap the values just before the actual function call, and swapped again immediately afterwards. The 'use_errno' parameter defaults to False, in this case 'ctypes_errno' is not touched. The values are also swapped immeditately before and after ctypes callback functions are called, if the callbacks are constructed using the new optional use_errno parameter set to True: CFUNCTYPE(..., use_errno=TRUE) or WINFUNCTYPE(..., use_errno=True). Two new ctypes functions are provided to access the 'ctypes_errno' value from Python: - ctypes.set_errno(value) sets ctypes_errno to 'value', the previous ctypes_errno value is returned. - ctypes.get_errno() returns the current ctypes_errno value. --- On Windows, the same scheme is implemented for the error value which is managed by the GetLastError() and SetLastError() windows api calls. The ctypes functions are 'ctypes.set_last_error(value)' and 'ctypes.get_last_error()', the CDLL and WinDLL optional parameter is named 'use_last_error', defaults to False. --- On Windows, TlsSetValue and TlsGetValue calls are used to provide thread local storage for the variables; ctypes compiled with __GNUC__ uses __thread variables.
1 parent a2b34b8
Tip revision: e70c3378c039cae30cd9ae559c4bdeb923254c43 authored by Thomas Heller on 04 June 2008, 18:59:03 UTC
Issue #1798: Add ctypes calling convention that allows safe access to
Issue #1798: Add ctypes calling convention that allows safe access to
Tip revision: e70c337
File | Mode | Size |
---|---|---|
Demo | ||
Doc | ||
Grammar | ||
Include | ||
Lib | ||
Mac | ||
Misc | ||
Modules | ||
Objects | ||
PC | ||
PCbuild | ||
Parser | ||
Python | ||
RISCOS | ||
Tools | ||
.bzrignore | -rw-r--r-- | 635 bytes |
.hgignore | -rw-r--r-- | 866 bytes |
.hgtags | -rw-r--r-- | 3.4 KB |
LICENSE | -rw-r--r-- | 13.4 KB |
Makefile.pre.in | -rw-r--r-- | 37.4 KB |
README | -rw-r--r-- | 55.8 KB |
configure | -rwxr-xr-x | 646.6 KB |
configure.in | -rw-r--r-- | 100.6 KB |
install-sh | -rwxr-xr-x | 7.0 KB |
pyconfig.h.in | -rw-r--r-- | 28.7 KB |
setup.py | -rw-r--r-- | 75.3 KB |
Computing file changes ...