Fix crash on teardown with Applet's ConfigLoader
Summary: Deleting AppletPrivate will delete the ConfigLoader which will cause a save, which can trigger a configSaved signal. I think it is correct that the config might emit a signal just before closing, and not at fault. AppletPrivate is deleted by this point, but Applet is not so the connection is still alive. When we handle the signal, it goes into a Q_PRIVATE_SLOT that crashes. This disconnect pattern is already used for guarding self config changes. BUG: 411221 Test Plan: kquitapp5 plasmashell, no longer crashes Reviewers: #plasma, alexeymin Reviewed By: alexeymin Subscribers: alexeymin, kde-frameworks-devel Tags: #frameworks Differential Revision: https://phabricator.kde.org/D23707
This commit is contained in:
parent
9d6a24a771
commit
5f746ce1c2
@ -141,6 +141,10 @@ Applet::~Applet()
|
|||||||
//let people know that i will die
|
//let people know that i will die
|
||||||
emit appletDeleted(this);
|
emit appletDeleted(this);
|
||||||
|
|
||||||
|
// ConfigLoader is deleted when AppletPrivate closes not Applet
|
||||||
|
// It saves on closure and emits a signal.
|
||||||
|
// disconnect early to avoid a crash. See 411221
|
||||||
|
disconnect(d->configLoader, SIGNAL(configChanged()), this, SLOT(propagateConfigChanged()));
|
||||||
delete d;
|
delete d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user