py3.10-prep: Fix a very old refcounting error in time_test.py
authorChristian Tismer <tismer@stackless.com>
Fri, 20 Aug 2021 16:18:57 +0000 (18:18 +0200)
committerDmitry Shachnev <mitya57@debian.org>
Tue, 16 Nov 2021 09:16:14 +0000 (09:16 +0000)
Since 2012-03-08, there was a refcounting error in
the typesystem_sample.xml file at <value-type name="Time">.
The boolean function results were not refcounted.

(Commit 7b731d702c64d172e192aa1876e4a6fade6c38d7)

This bug was hard to find because nobody expects a failure in the
testing code, and the error shows up at the very end in the
finalization code, totally unrelated to the error location.

In order to find it, the setting `PYTHONMALLOC=malloc` was needed,
because otherwise we got a Python memory dump but no traceback.
Then, Python was modified and code was inserted in the various
involved `code_dealloc`, `tupledealloc` and `object_dealloc`
functions that printed the involved refcounts and types before
performing the actual deallocation.

This bug actually was of no harm since only the wrong test was
involved. It was very misleading because there were quite some
changes to the `datetime` module in Python 3.10. But the bug
was nothing but a dormant refcounting error.

(cherry picked from commit 2af6ac20de365116b52b65c6c34cfd6c536c23df)

Gbp-Pq: Name py3.10-prep-Fix-a-very-old-refcounting-error-in-time_test.patch

sources/shiboken2/tests/samplebinding/typesystem_sample.xml

index 595afb9ae35a148a28f91b52771825edcaa19720..70fabcf739e2e261a01030493c8e1dd3e3ecb529 100644 (file)
                     %PYARG_0 = Py_False;
                 else
                     %PYARG_0 = Py_True;
+                Py_INCREF(%PYARG_0);
             }
           </inject-code>
         </add-function>
                     %PYARG_0 = Py_True;
                 else
                     %PYARG_0 = Py_False;
+                Py_INCREF(%PYARG_0);
             }
           </inject-code>
         </add-function>