Since 5.14 'receiver' QObjects will, on destruction, move its connection in the 'sender' object to an orphaned list, due for cleanup later.
The orphan list is cleaned up on the sender's next signal emission, or on its destruction.
In certain circumstances the sender object rarely or never emits signals, and is long-lived. This leads to a long-lived soft leak every time a connection is made to it.
Can be seen with this example, which is a reduced example of what happens in QNetworkAccessManager:
|For Gerrit Dashboard: QTBUG-88248|
|355076,1||QObject: cleanup the orphaned connection lists on destruction||6.1||qt/qtbase||Status: NEW||0||0|
|355085,2||Fix crash in concurrent disconnect||tqtc/lts-5.15||qt/tqtc-qtbase||Status: NEW||0||0|
|355086,2||QObject: cleanup the orphaned connection lists on destruction||tqtc/lts-5.15||qt/tqtc-qtbase||Status: NEW||+2||0|
|320789,15||QObject: cleanup the orphaned connection lists on destruction||dev||qt/qtbase||Status: MERGED||+2||0|
|322683,18||Fix crash in concurrent disconnect||dev||qt/qtbase||Status: MERGED||+2||0|
|355074,2||Fix crash in concurrent disconnect||6.2||qt/qtbase||Status: MERGED||+2||0|
|355075,2||Fix crash in concurrent disconnect||6.1||qt/qtbase||Status: MERGED||+2||0|
|355077,4||QObject: cleanup the orphaned connection lists on destruction||6.2||qt/qtbase||Status: MERGED||+2||0|