Details
Description
SignalManager::clear() deletes all of the global receiver callbacks without first disconnecting the receiver from the signal it's connected to. This can segfault when the callback is holding a last reference to an QObject is released, causing the QObject to be deleted, and a destroyed signal calls down a now invalid callback. One way to fix it might be just not to make callbacks if the program is shutting down, but a call to SignalManager::clear() before shutdown would still be unsafe.
Attachments
For Gerrit Dashboard: PYSIDE-88 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
170659,4 | GlobalReceiverV2: Suppress handling of destroyed() when deleting objects | dev | pyside/pyside-setup | Status: MERGED | +2 | 0 |
171433,3 | GlobalReceiverV2: Fix double delete of receivers on exit | dev | pyside/pyside-setup | Status: MERGED | +2 | 0 |