summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2021-09-06 22:29:29 +0300
committerAndrey Kleshchev <andreykproductengine@lindenlab.com>2021-09-06 22:37:24 +0300
commita0a235784fe38dbccff3bfcdb5a4930f51e2b2d6 (patch)
treef4bb2515f9988186fb90d9ba484f894c6ce42ecc
parentb677b90c0abefa62be3ffbd5b5af2bc1b9935fac (diff)
SL-15950 Crash at selectConversationPair
According to callstack data, new_selection was somehow 0x0002 which is invalid. According to logs, session was just deleted, right before opening floater to some other session by arriving message, likely to the removed one.
-rw-r--r--indra/newview/llfloaterimcontainer.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index 9c84fa1991..6cd1648182 100644
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -1686,7 +1686,7 @@ BOOL LLFloaterIMContainer::selectConversationPair(const LLUUID& session_id, bool
/* floater processing */
- if (NULL != session_floater)
+ if (NULL != session_floater && !session_floater->isDead())
{
if (session_id != getSelectedSession())
{
@@ -1858,11 +1858,14 @@ bool LLFloaterIMContainer::removeConversationListItem(const LLUUID& uuid, bool c
if (widget)
{
is_widget_selected = widget->isSelected();
- new_selection = mConversationsRoot->getNextFromChild(widget, FALSE);
- if (!new_selection)
- {
- new_selection = mConversationsRoot->getPreviousFromChild(widget, FALSE);
- }
+ if (mConversationsRoot)
+ {
+ new_selection = mConversationsRoot->getNextFromChild(widget, FALSE);
+ if (!new_selection)
+ {
+ new_selection = mConversationsRoot->getPreviousFromChild(widget, FALSE);
+ }
+ }
// Will destroy views and delete models that are not assigned to any views
widget->destroyView();