From 1a09fee8e1f9ca5319276ede10e36cffe7284a1a Mon Sep 17 00:00:00 2001
From: Oz Linden <oz@lindenlab.com>
Date: Fri, 3 Nov 2017 16:19:54 -0400
Subject: [PATCH] [FIXED] Access (read) violation using a
 LLVivoxVoiceClient::sessionState() after it's been free'ed

The shared pointer is passed by reference to LLVivoxVoiceClient::deleteSession() where
mSessionsByHandle.erase(iter) removes the last reference causing it to destruct while still
being accessed later on in the function.
(from Kitty Barnett)
---
 indra/newview/llvoicevivox.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 285ce298b08..eda3bfe0ee1 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -5694,7 +5694,8 @@ void LLVivoxVoiceClient::deleteAllSessions()
 
     while (!mSessionsByHandle.empty())
 	{
-        deleteSession(mSessionsByHandle.begin()->second);
+        const sessionStatePtr_t session = mSessionsByHandle.begin()->second;
+        deleteSession(session);
 	}
 	
 }
-- 
GitLab