Merge pull request #94666 from RandomShaper/fix_tangled_obj_clear_crash

Avoid potential crash on signal disconnection
This commit is contained in:
Rémi Verschelde 2024-08-19 14:33:44 +02:00
commit 86212c1fe4
No known key found for this signature in database
GPG Key ID: C3336907360768E1
1 changed files with 5 additions and 1 deletions

View File

@ -2097,7 +2097,11 @@ Object::~Object() {
// Disconnect signals that connect to this object. // Disconnect signals that connect to this object.
while (connections.size()) { while (connections.size()) {
Connection c = connections.front()->get(); Connection c = connections.front()->get();
bool disconnected = c.signal.get_object()->_disconnect(c.signal.get_name(), c.callable, true); Object *obj = c.callable.get_object();
bool disconnected = false;
if (likely(obj)) {
disconnected = c.signal.get_object()->_disconnect(c.signal.get_name(), c.callable, true);
}
if (unlikely(!disconnected)) { if (unlikely(!disconnected)) {
// If the disconnect has failed, abandon the connection to avoid getting trapped in an infinite loop here. // If the disconnect has failed, abandon the connection to avoid getting trapped in an infinite loop here.
connections.pop_front(); connections.pop_front();