summaryrefslogtreecommitdiff
path: root/indra/newview/llvoicevivox.cpp
AgeCommit message (Collapse)Author
2020-09-11SL-13830 Remade vivox shutdown to terminate when it is told to shutdown ↵Andrey Kleshchev
instead of when viewer is quiting
2020-09-11SL-13830 Don't crash if quiting during startupAndrey Kleshchev
2020-09-01SL-13830 Don't crash if quiting during startupAndrey Kleshchev
2020-08-28SL-13555 'Second Life quit unexpectedly' error messageAndrey Kleshchev
2020-08-22SL-13830 One more coroutine crashAndrey Kleshchev
2020-05-27DRTVWR-476, VOICE-88, SL-13025: Use a new port every SLVoice launch.Nat Goodspeed
The observed failure is that SLVoice, on relaunch, produces an error that bind() returned EADDRINUSE and terminates. Using a different port every time we relaunch avoids that collision.
2020-05-27DRTVWR-476: Make LLVivoxVoiceClient::logoutOfVivox() wait for logout.Nat Goodspeed
It can happen that we arrive at logoutOfVivox() with some other message queued on the LLEventMailDrop in question. If logoutOfVivox() assumes that other message is logout and exits, then subsequent code gets confused. Introduce a loop to wait (with the existing timeout) for the real logout message.
2020-05-06DRTVWR-476: Merge branch 'master' of lindenlab/viewer into DRTVWR-476-boost-1.72Nat Goodspeed
2020-03-25DRTVWR-476: Keep coroutine-local data on toplevel()'s stack frame.Nat Goodspeed
Instead of heap-allocating a CoroData instance per coroutine, storing the pointer in a ptr_map and deleting it from the ptr_map once the fiber_specific_ptr for that coroutine is cleaned up -- just declare a stack instance on the top-level stack frame, the simplest C++ lifespan management. Derive CoroData from LLInstanceTracker to detect potential name collisions and to enumerate instances. Continue registering each coroutine's CoroData instance in our fiber_specific_ptr, but use a no-op deleter function. Make ~LLCoros() directly pump the fiber scheduler a few times, instead of having a special "LLApp" listener.
2020-03-25DRTVWR-476: Introduce LLEventMailDrop::discard() (instead of flush()).Nat Goodspeed
Overriding virtual LLEventPump::flush() for the semantic of discarding LLEventMailDrop's queued events turns out not to be such a great idea, because LLEventPumps::flush(), which calls every registered LLEventPump's flush() method, is called every mainloop tick. The first time we hit a use case in which we expected LLEventMailDrop to hold queued events across a mainloop tick, we were baffled that they were never delivered. Moving that logic to a separate method specific to LLEventMailDrop resolves that problem. Naming it discard() clarifies its intended functionality.
2020-03-25DRTVWR-476: Directly reference LLVivoxVoiceClient::mVivoxPump.Nat Goodspeed
The LLEventMailDrop used to communicate with the Vivox coroutine is a member of LLVivoxVoiceClient. We don't need to keep looking it up by its string name in LLEventPumps.
2020-03-25SL-11216: Convert LLVersionInfo to an LLSingleton.Nat Goodspeed
This changeset is meant to exemplify how to convert a "namespace" class whose methods are static -- and whose data are module-static -- to an LLSingleton. LLVersionInfo has no initClass() or cleanupClass() methods, but the general idea is the same. * Derive the class from LLSingleton<T>: class LLSomeSingleton: public LLSingleton<LLSomeSingleton> { ... }; * Add LLSINGLETON(LLSomeSingleton); in the private section of the class. This usage implies a separate LLSomeSingleton::LLSomeSingleton() definition, as described in indra/llcommon/llsingleton.h. * Move module-scope data in the .cpp file to non-static class members. Change any sVariableName to mVariableName to avoid being outright misleading. * Make static class methods non-static. Remove '//static' comments from method definitions as needed. * For LLVersionInfo specifically, the 'const std::string&' return type was replaced with 'std::string'. Returning a reference to a static or a member, const or otherwise, is an anti-pattern: the interface constrains the implementation, prohibiting possibly later returning a temporary (an expression). * For LLVersionInfo specifically, 'const S32' return type was replaced with simple 'S32'. 'const' is just noise in that usage. * Simple member initialization (e.g. the original initializer expressions for static variables) can be done with member{ value } initializers (no examples here though). * Delete initClass() method. * LLSingleton's forté is of course lazy initialization. It might work to simply delete any calls to initClass(). But if there are side effects that must happen at that moment, replace LLSomeSingleton::initClass() with (void)LLSomeSingleton::instance(); * Most initClass() initialization can be done in the constructor, as would normally be the case. * Initialization that might cause a circular LLSingleton reference should be moved to initSingleton(). Override 'void initSingleton();' should be private. * For LLVersionInfo specifically, certain initialization that used to be lazily performed was made unconditional, due to its low cost. * For LLVersionInfo specifically, certain initialization involved calling methods that have become non-static. This was moved to initSingleton() because, in a constructor body, 'this' does not yet point to the enclosing class. * Delete cleanupClass() method. * There is already a generic LLSingletonBase::deleteAll() call in LLAppViewer::cleanup(). It might work to let this new LLSingleton be cleaned up with all the rest. But if there are side effects that must happen at that moment, replace LLSomeSingleton::cleanupClass() with LLSomeSingleton::deleteSingleton(). That said, much of the benefit of converting to LLSingleton is deleteAll()'s guarantee that cross-LLSingleton dependencies will be properly honored: we're trying to migrate the code base away from the present fragile manual cleanup sequence. * Most cleanupClass() cleanup can be done in the destructor, as would normally be the case. * Cleanup that might throw an exception should be moved to cleanupSingleton(). Override 'void cleanupSingleton();' should be private. * Within LLSomeSingleton methods, remove any existing LLSomeSingleton::methodName() qualification: simple methodName() is better. * In the rest of the code base, convert most LLSomeSingleton::methodName() references to LLSomeSingleton::instance().methodName(). (Prefer instance() to getInstance() because a reference does not admit the possibility of NULL.) * Of course, LLSomeSingleton::ENUM_VALUE can remain unchanged. In general, for many successive references to an LLSingleton instance, it can be useful to capture the instance() as in: auto& versionInfo{LLVersionInfo::instance()}; // ... versionInfo.getVersion() ... We did not do that here only to simplify the code review. The STRINGIZE(expression) macro encapsulates: std::ostringstream out; out << expression; return out.str(); We used that in a couple places. For LLVersionInfo specifically, lllogininstance_test.cpp used to dummy out a couple specific static methods. It's harder to dummy out LLSingleton::instance() references, so we add the real class to that test.
2019-10-29Downstream merge from lindenlab/viewer-lynxAndreyL ProductEngine
2019-10-21SL-12161 FIXED Disabling voice while a call is active leaves the Speak ↵Mnikolenko Productengine
button enabled.
2019-10-04rename SLVoice log file and rotate the way we do for SecondLife.logOz Linden
2019-05-21Merged in lindenlab/viewer-bearAndreyL ProductEngine
2019-03-08SL-10702: When attempting a new voice connection, ensure that the voicePump ↵Rider Linden
mail drop does not have any outstanding events.
2018-12-16DRTVWR-447: Merge up to latest viewer-releaseNat Goodspeed
2018-10-30SL-9955 FIXED crash-on-exit in LLVivoxVoiceClient::removeObserverMnikolenko ProductEngine
2018-09-26Automated merge with ssh://bitbucket.org/lindenlab/viewer-releaseNat Goodspeed
2018-09-13DRTVWR-474: Clean up use of LLDir::getAppRODataDir(), esp. on Mac.Nat Goodspeed
Clearly it's not obvious to maintainers that on the Mac, getAppRODataDir() returns the app's Resources directory: in a number of places the code starts with the executable directory and appends "../Resources" to find that.
2018-08-29SL-967 simplify viewer log file field syntaxOz Linden
MAINT-8991: only escape log message characters once, add unit test remove extra log line created by LL_ERRS document that tags may not contain spaces
2019-05-03SL-11058 Better delay logicandreykproductengine
2019-05-02SL-11058 Viewer "Voice is down" dialogs can stack upandreykproductengine
2019-03-21Local build Voice Fixandreykproductengine
2018-08-10VOICE-50 VOICE-58: recover from SLVoice process exit automaticallyOz Linden
2018-08-02merge changes for 5.1.7-releaseOz Linden
2018-08-02additional logging around launch/termination of SLVoiceOz Linden
2018-07-04MAINT-8800 Vivox pointlesly stalls for 10 seconds waiting on shutdownandreykproductengine
2018-06-27fix debug loggingOz Linden
2018-06-27fix provisioning debug logOz Linden
2018-06-27add more startup debug loggingOz Linden
2018-06-21merge changes for 5.1.6-releaseOz Linden
2018-06-21MAINT-8754 FIXED Premium Voice Morphs subscription renewal sends to wrong ↵maxim_productengine
location
2018-05-29merge changes for 5.1.4-releaseOz Linden
2018-05-29additional debug logging for voice startupOz Linden
2018-04-15logging changes for diagnosing startup connection issueOz Linden
2018-04-15VOICE-59: better fix for display human-friendly names for voice input and ↵Oz Linden
output devices
2018-04-13VOICE-59: display human-friendly names for voice input and output devicesOz Linden
2018-03-09merge changes for 5.1.2-releaseOz Linden
2018-03-09improve logging around setup and teardownOz Linden
2018-03-09MAINT-8362 Don't reconnect voice while in teleportandreykproductengine
2018-02-12Merged in lindenlab/viewer-releaseAndreyL ProductEngine
2018-01-12spell "Requesting" correctlyOz Linden
2017-12-06MAINT-8042 Crash in LLViewerRegion::capabilitiesReceived()Mnikolenko Productengine
2017-12-06Change channel join timeout to 30s per recommendation from VivoxOz Linden
2017-11-03[FIXED] Access (read) violation using a LLVivoxVoiceClient::sessionState() ↵Oz Linden
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)
2017-10-11merge changes for 5.0.8-releaseOz Linden
2017-09-12MAINT-7786 FIXED Crash in LLVivoxVoiceClient::provisionVoiceAccount()Mnikolenko Productengine
2017-09-12MAINT-7786 FIXED Crash in LLVivoxVoiceClient::provisionVoiceAccount()Mnikolenko Productengine