force-finish canberra notifications on close()

Authored by sitter on Sep 21 2018, 8:40 AM.

Description

force-finish canberra notifications on close()

Summary:
KNotification::close() causes the manager to close the plugin for the
notification and after that KNotification will call deleteLater() on
itself. In the canberra variant of NotifyByAudio we handled this by calling
ca_context_cancel to abort playback of the audio. This ultimately would
still cause a finishCallback once the playback actually cancelled. The
callback does arrive in an undefined amount of loop cycles later though.
Put together this allowed for timing issues where deleteLater would run
before the finishCallback arrived, giving finishCallback the risk of
accessing a KNotification object past its lifetime and segfaulting.

To prevent this from happening we'll finishNotification in the plugin's
close(). This drops the notification out of the mapping hashes and tells
the manager that we are done. finishCallback now returns immediately if it
cannot find a mapping for a notification (i.e. it was close()d already).

CHANGELOG: Fixed a crash caused by bad lifetime management of canberra-based audio notification
BUG: 398695

Test Plan: added qdebugs. without patch close() and thus deleteLater() happens before finishCallback() but the callback still does its thing. with patch finishCallback is noop.

Reviewers: broulik, jtamate

Reviewed By: broulik, jtamate

Subscribers: kde-frameworks-devel, jtamate

Tags: Frameworks

Differential Revision: https://phabricator.kde.org/D15638

(cherry picked from commit d4f51fdc1d53fbcb37a3c52dcbabe0e264b611ce)

Details

Committed
l10n daemon script <scripty@kde.org>Oct 10 2018, 7:59 PM
Reviewer
broulik
Differential Revision
D15638: force-finish canberra notifications on close()
Parents
R289:a419b8bea91c: GIT_SILENT Commit translations from l10n-kf5
Branches
Unknown
Tags
Unknown
References
tag: v5.51.0-rc2, tag: v5.51.0
l10n daemon script <scripty@kde.org> committed R289:0a55c7fe3913: force-finish canberra notifications on close() (authored by sitter).Oct 10 2018, 7:59 PM