Uploaded image for project: 'Qt for Python'
  1. Qt for Python
  2. PYSIDE-1436

Python 3.10 Update [was:PySide issue with Py_REFCNT() on Python 3.10]

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • P2: Important
    • 6.2.0
    • 6.1.0
    • Build System
    • None
    • All
    • 81e9cff884d6b03cdf64a5dd6ec6564d99177e0c (pyside/pyside-setup/dev)

    Description

           PySide2 fails to build with Python 3.10 on "Py_REFCNT(ob) = 1;" in finalizeStaticStrings() of sources/shiboken2/libshiboken/sbkstring.cpp. In Python 3.10, it's no longer possible to use the Py_REFCNT() macro to set an object reference count (only use it to get an object reference count). The Py_SET_REFCNT() function must now be used instead (function available since Python 3.9).

       

      Moreover, interned strings are now cleared at Python exit since Python 3.10. So it's unsafe to set directly a static string reference count to 1 and call Py_DECREF() on it to destroy it. Python is likely to crash in this case.

       

      I suggest to simply use call Py_DECREF() twice on static strings in finalizeStaticStrings(): see attached patch.

       

      I tested the patch on the Fedora Python 3.10 COPR and the package built successfully with my patch (but I did not test an application using PySide).

       

      I chose to only change the behavior on Python 3.10 and newer, since interned strings were not cleared at exit on Python 3.9 and older.

       

      References:

       

      Attachments

        Issue Links

          For Gerrit Dashboard: PYSIDE-1436
          # Subject Branch Project Status CR V

          Activity

            People

              ctismer Christian Tismer
              vstinner Victor Stinner
              Votes:
              1 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes