From 38635da94eb5e7f2356305ffd38567199e65528f Mon Sep 17 00:00:00 2001 From: pepper <3782201+rohvani@users.noreply.github.com> Date: Mon, 31 Aug 2026 18:18:17 -0400 Subject: Scope friendship offer deduplication by sender Treat an existing actionable friendship panel as a duplicate only when its notification belongs to the same resident. This preserves same-sender suppression and dead-panel replay behavior while allowing simultaneous offline requests from different residents to render in their own sessions. Validated with the RelWithDebInfo secondlife-bin build. --- indra/newview/llimprocessing.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'indra/newview/llimprocessing.cpp') diff --git a/indra/newview/llimprocessing.cpp b/indra/newview/llimprocessing.cpp index eee44b7ae0..bd5a2cddee 100644 --- a/indra/newview/llimprocessing.cpp +++ b/indra/newview/llimprocessing.cpp @@ -1453,9 +1453,12 @@ void LLIMProcessing::processNewMessage(LLUUID from_id, for (auto& panel : LLToastNotifyPanel::instance_snapshot()) { const std::string& notification_name = panel.getNotificationName(); - // Panels pending deferred deletion no longer suppress a live offer. + LLNotificationPtr panel_notification = LLNotificationsUtil::find(panel.getID()); + // Only a live actionable offer from this sender makes the packet a duplicate. if (!panel.isDead() && notification_name == "OfferFriendship" + && panel_notification + && panel_notification->getPayload()["from_id"].asUUID() == from_id && panel.isControlPanelEnabled()) { add_notification = false; -- cgit v1.3