Age | Commit message (Collapse) | Author | |
---|---|---|---|
2019-08-19 | DRTVWR-493: Improve exception safety of LLSingleton initialization. | Nat Goodspeed | |
Add try/catch clauses to constructSingleton() (to catch exceptions in the subclass constructor) and finishInitializing() (to catch exceptions in the subclass initSingleton() method). Each of these catch clauses rethrows the exception -- they're for cleanup, not for ultimate handling. Introduce LLSingletonBase::reset_initializing(list_t::size_t). The idea is that since we can't know whether the exception happened before or after the push_initializing() call in LLSingletonBase's constructor, we can't just pop the stack. Instead, constructSingleton() captures the stack size before attempting to construct the new LLSingleton subclass. On exception, it calls reset_initializing() to restore the stack to that size. Naturally that requires a corresponding LLSingleton_manage_master method, whose MasterList specialization is a no-op. finishInitializing()'s exception handling is a bit simpler because it has a constructed LLSingleton subclass instance in hand, therefore push_initializing() has definitely been called, therefore it can call pop_initializing(). Break out new static capture_dependency() method from finishInitializing() because, in the previous LLSingleton::getInstance() implementation, the logic now wrapped in capture_dependency() was reached even in the INITIALIZED case. TODO: Add a new EInitState to differentiate "have been constructed, now calling initSingleton()" from "fully initialized, normal case" -- in the latter control path we should not be calling capture_dependency(). The LLSingleton_manage_master<LLSingletonBase::MasterList> specialization's get_initializing() function (which called get_initializing_from()) was potentially dangerous. get_initializing() is called by push_initializing(), which (in the general case) is called by LLSingletonBase's constructor. If somehow the MasterList's LLSingletonBase constructor ended up calling get_initializing(), it would have called get_initializing_from(), passing an LLSingletonBase which had not yet been constructed into the MasterList. In particular, its mInitializing map would not yet have been initialized at all. Since the MasterList must not, by design, depend on any other LLSingletons, LLSingleton_manage_master<LLSingletonBase::MasterList>::get_initializing() need not return a list from the official mInitializing map anyway. It can, and should, and now does, return a static dummy list. That obviates get_initializing_from(), which is removed. That in turn means we no longer need to pass get_initializing() an LLSingletonBase*. Remove that parameter. | |||
2019-08-19 | DRTVWR-493: When a test fails due to exception, display exception. | Nat Goodspeed | |
2019-08-15 | SL-11662 - apparently a race condition between image loading and material ↵ | Brad Payne (Vir Linden) | |
property setting | |||
2019-08-14 | DRTVWR-493: Work around static initialization order problem. | Nat Goodspeed | |
LLParamSingleton contained a static member mutex. Unfortunately that wasn't guaranteed to be initialized by the time its getInstance() was entered. Use a function-local static instead. | |||
2019-08-14 | No such thing as 'virtual static' | Nat Goodspeed | |
2019-08-14 | Merged in lindenlab/viewer-release | andreykproductengine | |
2019-08-13 | merge | Brad Payne (Vir Linden) | |
2019-08-13 | Merged in lindenlab/viewer-serval | AndreyL ProductEngine | |
2019-08-13 | Merged in lindenlab/viewer-bear | AndreyL ProductEngine | |
2019-08-13 | Merged in lindenlab/viewer-lynx | AndreyL ProductEngine | |
2019-08-13 | Merged in lindenlab/viewer-release | AndreyL ProductEngine | |
2019-08-13 | DRTVWR-493 Test fix for W64 | andreykproductengine | |
2019-08-13 | DRTVWR-493 Converted LLViewerParcelMediaAutoPlay to singleton | andreykproductengine | |
2019-08-13 | DRTVWR-493 Reworked a number of inits | andreykproductengine | |
2019-08-13 | increment viewer version to 6.2.5 | Nat Goodspeed | |
2019-08-13 | SL-11718 Crash in LLRender2D | andreykproductengine | |
2019-08-13 | SL-11707 FIXED [Maint] Incorrect sound length limit referenced. | maxim_productengine | |
2019-08-12 | DRTVWR-493: Rely on recursive_mutex to handle circularity | Nat Goodspeed | |
from LLParamSingleton::initSingleton(). | |||
2019-08-12 | Automated merge with ssh://bitbucket.org/andreykproductengine/drtvwr-493 | Nat Goodspeed | |
2019-08-12 | DRTVWR-493: Permit LLParamSingleton::initSingleton() circularity. | Nat Goodspeed | |
This was forbidden, but AndreyK points out cases in which LLParamSingleton:: initSingleton() should in fact be allowed to circle back to its own instance() method. Use a recursive_mutex instead of plain mutex to permit that; remove LL_ERRS preventing it. Add LLParamSingleton::instance() method that calls LLParamSingleton::getInstance(). Inheriting LLSingleton::instance() called LLSingleton::getInstance() -- not at all what we want. Add LLParamSingleton unit tests. | |||
2019-08-12 | DRTVWR-493 LLWearableType to LLParamSingleton | andreykproductengine | |
2019-08-12 | Merge from nat_linden/drtvwr-493 | andreykproductengine | |
2019-08-12 | SL-11719 Initialize the conversation dialog on login screen appearance to ↵ | AndreyL ProductEngine | |
avoid crash | |||
2019-08-12 | Automated merge with file:///Users/nat/linden/viewer-catch | Nat Goodspeed | |
2019-08-12 | DRTVWR-493: Streamline LLParamSingleton, LLLockedSingleton. | Nat Goodspeed | |
Simplify LLSingleton::SingletonLifetimeManager to SingletonInitializer: that struct has not been responsible for deletion ever since LLSingletonBase acquired dependency-ordered deleteAll(). Move SingletonData::mInitState changes from SingletonLifetimeManager to constructSingleton() method. Similarly, constructSingleton() now sets SingletonData::mInstance instead of making its caller store the pointer. Add variadic arguments to LLSingleton::constructSingleton() so we can reuse it for LLParamSingleton. Add finishInitializing() method to encapsulate logic reused for getInstance()'s INITIALIZING and DELETED cases. Make LLParamSingleton a subclass of LLSingleton, just as LLLockedSingleton is a subclass of LLParamSingleton. Make LLParamSingleton a friend of LLSingleton, so it can access private members of LLSingleton without also granting access to any DERIVED_CLASS subclass. This eliminates the need for protected getInitState(). LLParamSingleton::initParamSingleton() reuses LLSingleton::constructSingleton() and finishInitializing(). Its getInstance() method completely replaces LLSingleton::getInstance(): in most EInitStates, LLParamSingleton::getInstance() is an error. Use a std::mutex to serialize calls to LLParamSingleton::initParamSingleton() and getInstance(). While LLSingleton::getInstance() relies on the "initialized exactly once" guarantee for block-scope static declarations, LLParamSingleton cannot rely on the same mechanism. LLLockedSingleton is now a very succinct subclass of LLParamSingleton -- they have very similar functionality. Giving the LLSINGLETON() macro variadic arguments eliminates the need for a separate LLPARAMSINGLETON() macro, while continuing to support existing usage. | |||
2019-08-12 | DRTVWR-493: Make catch_llerrs() a member of WrapLLErrs. | Nat Goodspeed | |
2019-08-12 | Automated merge with ssh://bitbucket.org/nat_linden/viewer-vs2017 | Nat Goodspeed | |
2019-08-11 | DRTVWR-493 tiny optimization | andreykproductengine | |
2019-08-10 | DRTVWR-493: Introduce test catch_what(), catch_llerrs() functions. | Nat Goodspeed | |
Use them in place of awkward try/catch test boilerplate. | |||
2019-08-10 | DRTVWR-493 LLUI to LLParamSingleton | andreykproductengine | |
2019-08-10 | DRTVWR-493 LLRender2D init cleanup | andreykproductengine | |
2019-08-10 | SL-11716 Fixed crash on initializing LLUI | AndreyL ProductEngine | |
2019-08-09 | SL-9699 Login selection | andreykproductengine | |
2019-08-19 | SL-11692 FIXED The "Walk / run / fly..." menu item is not checked when in use | maxim_productengine | |
2019-08-19 | SL-11749 FIXED Show in search grayed out at 128m minimum | maxim_productengine | |
2019-08-16 | SL-11740 FIXED Wrong entries in conversation.log for groups with | in the name | maxim_productengine | |
2019-08-15 | SL-209 Cleanup Merchant Outbox | andreykproductengine | |
2019-08-14 | SL-11674 Update bulk upload warning | maxim_productengine | |
2019-08-06 | SL-9815 An error prompts the user to teleport when they have no credencials set | andreykproductengine | |
2019-08-06 | SL-10908 Test viewers should crash normally | andreykproductengine | |
2019-08-05 | SL-10908 One more safeguard | andreykproductengine | |
2019-07-31 | SL-11657 Separated expected from current inventory serial for better sync ↵ | andreykproductengine | |
and to fix partial loads | |||
2019-08-01 | SL-7628 Camera doesn't follow avatar, while avatar is sitting on physical object | andreykproductengine | |
2019-08-01 | SL-11666 Fixed the search menu button being over Linden dollar balance | andreykproductengine | |
2019-07-30 | SL-11651 Add 'whole word only' search and 'multi-partial name' search to ↵ | maxim_productengine | |
Inventory Filter | |||
2019-07-29 | SL-10047 Confusing language for Russian error message translation | andreykproductengine | |
2019-07-29 | SL-9189 Add ability to rename gesture in Gesture list | maxim_productengine | |
2019-07-26 | SL-8380 Ability to disable 2D UI tooltips | andreykproductengine | |
2019-07-25 | DRTVWR-493 LLRender2D to LLParamSingleton | andreykproductengine | |
2019-07-25 | SL-10962 Support for suppressing JavaScript dialogs in the media plugin code | AndreyL ProductEngine | |