Age | Commit message (Collapse) | Author | |
---|---|---|---|
2020-03-25 | DRTVWR-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-25 | SL-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-29 | Downstream merge from lindenlab/viewer-lynx | AndreyL ProductEngine | |
2019-10-21 | SL-12161 FIXED Disabling voice while a call is active leaves the Speak ↵ | Mnikolenko Productengine | |
button enabled. | |||
2019-10-04 | rename SLVoice log file and rotate the way we do for SecondLife.log | Oz Linden | |
2019-05-21 | Merged in lindenlab/viewer-bear | AndreyL ProductEngine | |
2019-03-08 | SL-10702: When attempting a new voice connection, ensure that the voicePump ↵ | Rider Linden | |
mail drop does not have any outstanding events. | |||
2018-12-16 | DRTVWR-447: Merge up to latest viewer-release | Nat Goodspeed | |
2018-10-30 | SL-9955 FIXED crash-on-exit in LLVivoxVoiceClient::removeObserver | Mnikolenko ProductEngine | |
2018-09-26 | Automated merge with ssh://bitbucket.org/lindenlab/viewer-release | Nat Goodspeed | |
2018-09-13 | DRTVWR-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-29 | SL-967 simplify viewer log file field syntax | Oz 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-03 | SL-11058 Better delay logic | andreykproductengine | |
2019-05-02 | SL-11058 Viewer "Voice is down" dialogs can stack up | andreykproductengine | |
2019-03-21 | Local build Voice Fix | andreykproductengine | |
2018-08-10 | VOICE-50 VOICE-58: recover from SLVoice process exit automatically | Oz Linden | |
2018-08-02 | merge changes for 5.1.7-release | Oz Linden | |
2018-08-02 | additional logging around launch/termination of SLVoice | Oz Linden | |
2018-07-04 | MAINT-8800 Vivox pointlesly stalls for 10 seconds waiting on shutdown | andreykproductengine | |
2018-06-27 | fix debug logging | Oz Linden | |
2018-06-27 | fix provisioning debug log | Oz Linden | |
2018-06-27 | add more startup debug logging | Oz Linden | |
2018-06-21 | merge changes for 5.1.6-release | Oz Linden | |
2018-06-21 | MAINT-8754 FIXED Premium Voice Morphs subscription renewal sends to wrong ↵ | maxim_productengine | |
location | |||
2018-05-29 | merge changes for 5.1.4-release | Oz Linden | |
2018-05-29 | additional debug logging for voice startup | Oz Linden | |
2018-04-15 | logging changes for diagnosing startup connection issue | Oz Linden | |
2018-04-15 | VOICE-59: better fix for display human-friendly names for voice input and ↵ | Oz Linden | |
output devices | |||
2018-04-13 | VOICE-59: display human-friendly names for voice input and output devices | Oz Linden | |
2018-03-09 | merge changes for 5.1.2-release | Oz Linden | |
2018-03-09 | improve logging around setup and teardown | Oz Linden | |
2018-03-09 | MAINT-8362 Don't reconnect voice while in teleport | andreykproductengine | |
2018-02-12 | Merged in lindenlab/viewer-release | AndreyL ProductEngine | |
2018-01-12 | spell "Requesting" correctly | Oz Linden | |
2017-12-06 | MAINT-8042 Crash in LLViewerRegion::capabilitiesReceived() | Mnikolenko Productengine | |
2017-12-06 | Change channel join timeout to 30s per recommendation from Vivox | Oz 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-11 | merge changes for 5.0.8-release | Oz Linden | |
2017-09-12 | MAINT-7786 FIXED Crash in LLVivoxVoiceClient::provisionVoiceAccount() | Mnikolenko Productengine | |
2017-09-12 | MAINT-7786 FIXED Crash in LLVivoxVoiceClient::provisionVoiceAccount() | Mnikolenko Productengine | |
2017-07-01 | MAINT-142 No need for callback on normal exit | andreykproductengine | |
2017-06-30 | MAINT-142 Fixed Speak button remains enabled in case of SLVoice process ↵ | andreykproductengine | |
termination | |||
2017-05-02 | VOICE-47: Disconnect from voice during teleport to prevent audio artifacts | Oz Linden | |
2017-03-14 | remove use of cached controls for enable and override of voice | Oz Linden | |
2017-03-14 | provide defaults for voice control settings | Oz Linden | |
2017-03-14 | fix shadowed variable, disable daemon launch of voice disabled | Oz Linden | |
2017-03-13 | fix login on setup? | Oz Linden | |
2017-03-13 | initialize mVoiceEnabled during setup | Oz Linden | |
2017-03-13 | clean up use of mVoiceEnabled (rename the session member mVoiceActive) | Oz Linden | |
2017-03-10 | remove check for enabled and initialized following connect (may not be ↵ | Oz Linden | |
initialized yet at that point) |