summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorakleshchev <117672381+akleshchev@users.noreply.github.com>2022-12-06 04:37:07 +0200
committerGitHub <noreply@github.com>2022-12-06 04:37:07 +0200
commitf7010e46af4205f2f14e07ee5d70c144e44aa7a5 (patch)
tree80dde1e4e60e9d89fc8a4403602b1da08134c8f2 /indra/newview
parent112446804de888eef73f9f655d7c911da2d0a638 (diff)
SL-18778 Crash at LLVoiceClient::removeObserver (#25)
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llspeakingindicatormanager.cpp20
-rw-r--r--indra/newview/llvoiceclient.cpp15
-rw-r--r--indra/newview/llvoiceclient.h2
-rw-r--r--indra/newview/llvoicevivox.cpp5
-rw-r--r--indra/newview/llvoicevivox.h2
5 files changed, 26 insertions, 18 deletions
diff --git a/indra/newview/llspeakingindicatormanager.cpp b/indra/newview/llspeakingindicatormanager.cpp
index 5ca1d4b4a5..0111d8869c 100644
--- a/indra/newview/llspeakingindicatormanager.cpp
+++ b/indra/newview/llspeakingindicatormanager.cpp
@@ -51,6 +51,10 @@ class SpeakingIndicatorManager : public LLSingleton<SpeakingIndicatorManager>, L
LLSINGLETON(SpeakingIndicatorManager);
~SpeakingIndicatorManager();
LOG_CLASS(SpeakingIndicatorManager);
+
+protected:
+ void cleanupSingleton();
+
public:
/**
@@ -183,12 +187,16 @@ SpeakingIndicatorManager::SpeakingIndicatorManager()
SpeakingIndicatorManager::~SpeakingIndicatorManager()
{
- // Don't use LLVoiceClient::getInstance() here without check
- // singleton MAY have already been destroyed.
- if(LLVoiceClient::instanceExists())
- {
- LLVoiceClient::getInstance()->removeObserver(this);
- }
+}
+
+void SpeakingIndicatorManager::cleanupSingleton()
+{
+ // Don't use LLVoiceClient::getInstance() here without a check,
+ // singleton MAY have already been destroyed.
+ if (LLVoiceClient::instanceExists())
+ {
+ LLVoiceClient::getInstance()->removeObserver(this);
+ }
}
void SpeakingIndicatorManager::sOnCurrentChannelChanged(const LLUUID& /*session_id*/)
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 2ef2d66f18..6bb987ede4 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -797,7 +797,10 @@ void LLVoiceClient::addObserver(LLVoiceClientStatusObserver* observer)
void LLVoiceClient::removeObserver(LLVoiceClientStatusObserver* observer)
{
- if (mVoiceModule && mVoiceModule->singletoneInstanceExists()) mVoiceModule->removeObserver(observer);
+ if (mVoiceModule)
+ {
+ mVoiceModule->removeObserver(observer);
+ }
}
void LLVoiceClient::addObserver(LLFriendObserver* observer)
@@ -807,7 +810,10 @@ void LLVoiceClient::addObserver(LLFriendObserver* observer)
void LLVoiceClient::removeObserver(LLFriendObserver* observer)
{
- if (mVoiceModule && mVoiceModule->singletoneInstanceExists()) mVoiceModule->removeObserver(observer);
+ if (mVoiceModule)
+ {
+ mVoiceModule->removeObserver(observer);
+ }
}
void LLVoiceClient::addObserver(LLVoiceClientParticipantObserver* observer)
@@ -817,7 +823,10 @@ void LLVoiceClient::addObserver(LLVoiceClientParticipantObserver* observer)
void LLVoiceClient::removeObserver(LLVoiceClientParticipantObserver* observer)
{
- if (mVoiceModule && mVoiceModule->singletoneInstanceExists()) mVoiceModule->removeObserver(observer);
+ if (mVoiceModule)
+ {
+ mVoiceModule->removeObserver(observer);
+ }
}
std::string LLVoiceClient::sipURIFromID(const LLUUID &id)
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index 246883b611..aa67502908 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -122,8 +122,6 @@ public:
virtual const LLVoiceVersionInfo& getVersion()=0;
- virtual bool singletoneInstanceExists()=0;
-
/////////////////////
/// @name Tuning
//@{
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index ac6369e4e2..5a06877c38 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -5217,11 +5217,6 @@ void LLVivoxVoiceClient::declineInvite(std::string &sessionHandle)
}
}
-bool LLVivoxVoiceClient::singletoneInstanceExists()
-{
- return LLVivoxVoiceClient::instanceExists();
-}
-
void LLVivoxVoiceClient::leaveNonSpatialChannel()
{
LL_DEBUGS("Voice") << "Request to leave spacial channel." << LL_ENDL;
diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h
index ebc3a62c35..0a785401c1 100644
--- a/indra/newview/llvoicevivox.h
+++ b/indra/newview/llvoicevivox.h
@@ -73,8 +73,6 @@ public:
// Returns true if vivox has successfully logged in and is not in error state
virtual bool isVoiceWorking() const;
-
- virtual bool singletoneInstanceExists();
/////////////////////
/// @name Tuning