summaryrefslogtreecommitdiffstats
path: root/Lib/dis.py
diff options
context:
space:
mode:
authorThomas Heller <theller@ctypes.org>2008-06-04 18:59:03 (GMT)
committerThomas Heller <theller@ctypes.org>2008-06-04 18:59:03 (GMT)
commite70c3378c039cae30cd9ae559c4bdeb923254c43 (patch)
tree5977a09a2cd5bbe4aa3ff6bb52b4b554c179097a /Lib/dis.py
parenta2b34b87a94871999c78f343773ccf0f8c545932 (diff)
downloadcpython-e70c3378c039cae30cd9ae559c4bdeb923254c43.zip
cpython-e70c3378c039cae30cd9ae559c4bdeb923254c43.tar.gz
cpython-e70c3378c039cae30cd9ae559c4bdeb923254c43.tar.bz2
Issue #1798: Add ctypes calling convention that allows safe access to
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.
Diffstat (limited to 'Lib/dis.py')
0 files changed, 0 insertions, 0 deletions