From e1e0dcc040b9f44555d82e08373f74996576329c Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Fri, 8 Mar 2019 17:34:49 -0800 Subject: SL-10702: When attempting a new voice connection, ensure that the voicePump mail drop does not have any outstanding events. --- indra/llcommon/llevents.h | 10 ++++++---- indra/newview/llvoicevivox.cpp | 5 +++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/indra/llcommon/llevents.h b/indra/llcommon/llevents.h index 5d60c63810..d850cb4fcc 100644 --- a/indra/llcommon/llevents.h +++ b/indra/llcommon/llevents.h @@ -582,11 +582,12 @@ public: /// Generate a distinct name for a listener -- see listen() static std::string inventName(const std::string& pfx="listener"); -private: - friend class LLEventPumps; /// flush queued events virtual void flush() {} +private: + friend class LLEventPumps; + virtual void reset(); @@ -675,8 +676,10 @@ public: virtual ~LLEventMailDrop() {} /// Post an event to all listeners - virtual bool post(const LLSD& event); + virtual bool post(const LLSD& event) override; + /// Remove any history stored in the mail drop. + virtual void flush() override { mEventHistory.clear(); LLEventStream::flush(); }; protected: virtual LLBoundListener listen_impl(const std::string& name, const LLEventListener&, const NameList& after, @@ -703,7 +706,6 @@ public: /// Post an event to all listeners virtual bool post(const LLSD& event); -private: /// flush queued events virtual void flush(); diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index cf40058c34..0d3f65502a 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -1460,6 +1460,11 @@ bool LLVivoxVoiceClient::addAndJoinSession(const sessionStatePtr_t &nextSession) LLSD timeoutResult(LLSDMap("session", "timeout")); + // We are about to start a whole new session. Anything that MIGHT still be in our + // maildrop is going to be stale and cause us much wailing and gnashing of teeth. + // Just flush it all out and start new. + voicePump.flush(); + // It appears that I need to wait for BOTH the SessionGroup.AddSession response and the SessionStateChangeEvent with state 4 // before continuing from this state. They can happen in either order, and if I don't wait for both, things can get stuck. // For now, the SessionGroup.AddSession response handler sets mSessionHandle and the SessionStateChangeEvent handler transitions to stateSessionJoined. -- cgit v1.2.3 From 5f01cf3b1c76a53a576a10820e2cb366d1e76714 Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Fri, 8 Mar 2019 17:47:11 -0800 Subject: SL-10702: Mac gets very picky about override. (or MSVC isn't picky enough) --- indra/llcommon/llevents.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llcommon/llevents.h b/indra/llcommon/llevents.h index d850cb4fcc..62d97007ac 100644 --- a/indra/llcommon/llevents.h +++ b/indra/llcommon/llevents.h @@ -683,7 +683,7 @@ public: protected: virtual LLBoundListener listen_impl(const std::string& name, const LLEventListener&, const NameList& after, - const NameList& before); + const NameList& before) override; private: typedef std::list EventList; -- cgit v1.2.3