Use reference-counted pointer in notification callback

`this` could be deleted after `Notification::BeginExecuteNotification`
exited and before `Notification::ExecuteNotificationHelper` finished.
This is fixed by constructing a `Notification::Ptr` and operate on that
one as it is properly reference-counted.
This commit is contained in:
Julian Brost 2021-01-11 18:11:48 +01:00
parent 5f548c8f89
commit aea06a27dc
1 changed files with 5 additions and 1 deletions

View File

@ -431,7 +431,11 @@ void Notification::BeginExecuteNotification(NotificationType type, const CheckRe
<< "Sending " << (reminder ? "reminder " : "") << "'" << NotificationTypeToString(type) << "' notification '"
<< notificationName << "' for user '" << userName << "'";
Utility::QueueAsyncCallback(std::bind(&Notification::ExecuteNotificationHelper, this, type, user, cr, force, author, text));
// Explicitly use Notification::Ptr to keep the reference counted while the callback is active
Notification::Ptr notification (this);
Utility::QueueAsyncCallback([notification, type, user, cr, force, author, text]() {
notification->ExecuteNotificationHelper(type, user, cr, force, author, text);
});
/* collect all notified users */
allNotifiedUsers.insert(user);