summaryrefslogtreecommitdiff
path: root/indra/newview/llimprocessing.cpp
diff options
context:
space:
mode:
authorpepper <3782201+rohvani@users.noreply.github.com>2026-08-31 18:18:17 -0400
committerpepper <3782201+rohvani@users.noreply.github.com>2026-08-31 18:19:17 -0400
commit38635da94eb5e7f2356305ffd38567199e65528f (patch)
tree5dfa73f191331dc4400ffe6f40b1f8968e8616f1 /indra/newview/llimprocessing.cpp
parentce1b7583c99eb8155fd6b1621b3976fb31cac913 (diff)
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.
Diffstat (limited to 'indra/newview/llimprocessing.cpp')
-rw-r--r--indra/newview/llimprocessing.cpp5
1 files changed, 4 insertions, 1 deletions
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;