]> granicus.if.org Git - python/commit
bpo-37140: Fix StructUnionType_paramfunc() (GH-15612)
authorVictor Stinner <vstinner@redhat.com>
Fri, 30 Aug 2019 12:30:33 +0000 (14:30 +0200)
committerGitHub <noreply@github.com>
Fri, 30 Aug 2019 12:30:33 +0000 (14:30 +0200)
commit96b4087ce784ee7434dffdf69c475f5b40543982
treeae440df23a43a6bbfd6e6f00d6c353ae3c88dd52
parent6a650aaf7735e30636db2721247f317064c2cfd4
bpo-37140: Fix StructUnionType_paramfunc() (GH-15612)

Fix a ctypes regression of Python 3.8. When a ctypes.Structure is
passed by copy to a function, ctypes internals created a temporary
object which had the side effect of calling the structure finalizer
(__del__) twice. The Python semantics requires a finalizer to be
called exactly once. Fix ctypes internals to no longer call the
finalizer twice.

Create a new internal StructParam_Type which is only used by
_ctypes_callproc() to call PyMem_Free(ptr) on Py_DECREF(argument).
StructUnionType_paramfunc() creates such object.
Lib/ctypes/test/test_structures.py
Misc/NEWS.d/next/Library/2019-08-30-11-21-10.bpo-37140.cFAX-a.rst [new file with mode: 0644]
Modules/_ctypes/_ctypes.c