summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2020-03-25DRTVWR-494: Streamline LLEventTimer::updateClass().Nat Goodspeed
No need to capture a separate list of completed LLEventTimer instances to delete after the primary loop, since at this point we're looping over a snapshot and can directly delete each completed timer.
2020-03-25DRTVWR-494: Add on_main_thread(), sibling to assert_main_thread().Nat Goodspeed
2020-03-25DRTVWR-494: Improve thread safety of LLSingleton machinery.Nat Goodspeed
Remove warnings about LLSingleton not being thread-safe because, at this point, we have devoted considerable effort to trying to make it thread-safe. Add LLSingleton<T>::Locker, a nested class which both provides a function- static mutex and a scoped lock that uses it. Instantiating Locker, which has a nullary constructor, replaces the somewhat cumbersome idiom of declaring a std::unique_lock<std::recursive_mutex> lk(getMutex); This eliminates (or rather, absorbs) the typedefs and getMutex() method from LLParamSingleton. Replace explicit std::unique_lock declarations in LLParamSingleton methods with Locker declarations. Remove LLSingleton<T>::SingletonInitializer nested struct. Instead of getInstance() relying on function-static initialization to protect (only) constructSingleton() calls, explicitly use a Locker instance to cover its whole scope, and make the UNINITIALIZED case call constructSingleton(). Rearrange cases so that after constructSingleton(), control falls through to the CONSTRUCTED case and the finishInitializing() call. Use a Locker instance in other public-facing methods too: instanceExists(), wasDeleted(), ~LLSingleton(). Make destructor protected so it can only be called via deleteSingleton() (but must be accessible to subclasses for overrides). Remove LLSingletonBase::get_master() and get_initializing(), which permitted directly manipulating the master list and the initializing stack without any locking mechanism. Replace with get_initializing_size(). Similarly, replace LLSingleton_manage_master::get_initializing() with get_initializing_size(). Use in constructSingleton() in place of get_initializing().size(). Remove LLSingletonBase::capture_dependency()'s list_t parameter, which accepted the list returned by get_initializing(). Encapsulate that retrieval within the scope of the new lock in capture_dependency(). Add LLSingleton_manage_master::capture_dependency(LLSingletonBase*, EInitState) to forward (or not) a call to LLSingletonBase::capture_dependency(). Nullary LLSingleton<T>::capture_dependency() calls new LLSingleton_manage_master method. Equip LLSingletonBase::MasterList with a mutex of its own, separate from the one donated by the LLSingleton machinery, to serialize use of MasterList data members. Introduce MasterList::Lock nested class to lock the MasterList mutex while providing a reference to the MasterList instance. Introduce subclasses LockedMaster, which provides a reference to the actual mMaster master list while holding the MasterList lock; and LockedInitializing, which does the same for the initializing list. Make mMaster and get_initializing_() private so that consuming code can *only* access those lists via LockedInitializing and LockedMaster. Make MasterList::cleanup_initializing_() private, with a LockedInitializing public forwarding method. This avoids another call to MasterList::instance(), and also mandates that the lock is currently held during every call. Similarly, move LLSingletonBase::log_initializing() to a LockedInitializing log() method. (transplanted from dca0f16266c7bddedb51ae7d7dca468ba87060d5)
2020-03-25DRTVWR-494: Quiet VS warnings about its own <mutex> header.Nat Goodspeed
2020-03-25DRTVWR-494: Defend LLInstanceTracker against multi-thread usage.Nat Goodspeed
The previous implementation went to some effort to crash if anyone attempted to create or destroy an LLInstanceTracker subclass instance during traversal. That restriction is manageable within a single thread, but becomes unworkable if it's possible that a given subclass might be used on more than one thread. Remove LLInstanceTracker::instance_iter, beginInstances(), endInstances(), also key_iter, beginKeys() and endKeys(). Instead, introduce key_snapshot() and instance_snapshot(), the only means of iterating over LLInstanceTracker instances. (These are intended to resemble functions, but in fact the current implementation simply presents the classes.) Iterating over a captured snapshot defends against container modifications during traversal. The term 'snapshot' reminds the coder that a new instance created during traversal will not be considered. To defend against instance deletion during traversal, a snapshot stores std::weak_ptrs which it lazily dereferences, skipping on the fly any that have expired. Dereferencing instance_snapshot::iterator gets you a reference rather than a pointer. Because some use cases want to delete all existing instances, add an instance_snapshot::deleteAll() method that extracts the pointer. Those cases used to require explicitly copying instance pointers into a separate container; instance_snapshot() now takes care of that. It remains the caller's responsibility to ensure that all instances of that LLInstanceTracker subclass were allocated on the heap. Replace unkeyed static LLInstanceTracker::getInstance(T*) -- which returned nullptr if that instance had been destroyed -- with new getWeak() method returning std::weak_ptr<T>. Caller must detect expiration of that weak_ptr. Adjust tests accordingly. Use of std::weak_ptr to detect expired instances requires engaging std::shared_ptr in the constructor. We now store shared_ptrs in the static containers (std::map for keyed, std::set for unkeyed). Make LLInstanceTrackerBase a template parameterized on the type of the static data it manages. For that reason, hoist static data class declarations out of the class definitions to an LLInstanceTrackerStuff namespace. Remove the static atomic sIterationNestDepth and its methods incrementDepth(), decrementDepth() and getDepth(), since they were used only to forbid creation and destruction during traversal. Add a std::mutex to static data. Introduce an internal LockStatic class that locks the mutex while providing a pointer to static data, making that the only way to access the static data. The LLINSTANCETRACKER_DTOR_NOEXCEPT macro goes away because we no longer expect ~LLInstanceTracker() to throw an exception in test programs. That affects LLTrace::StatBase as well as LLInstanceTracker itself. Adapt consumers to the new LLInstanceTracker API.
2020-03-25DRTVWR-494: Show copy-paste-friendly env vars and test command.Nat Goodspeed
Moderately often I want to copy the (long) integration test program path from build output and rerun the test program by hand. But typically we need environment variables set as well so it can find its dynamic libraries. This has resulted in my copying parts of several lines of build output, then pasting to a command prompt, then hand-tweaking the pasted text so it makes sense as a command. Streamline run_build_test.py output so less hand-tweaking is needed.
2020-03-25SL-12478 Long names are not beautiful in nametagsAndrey Kleshchev
2020-03-25SL-12554 FIXED The value of the 'Avatar Maximum Complexity' is not ↵Mnikolenko Productengine
synchronized after closing Advanced settings
2020-03-24Merged in davep/DRTVWR-440 (pull request #45)Dave Parks
Davep/DRTVWR-440
2020-03-24Merge cleanupRunitai Linden
2020-03-24SL-1431 settings_per_account.xml file should be attached to crashreportMnikolenko Productengine
2020-03-24Merge branch 'DRTVWR-440' of bitbucket.org:lindenlab/viewer into ↵Runitai Linden
davep/DRTVWR-440
2020-03-24Fix for bad fullbright shiny shininess values and inconsistency between ↵Runitai Linden
materialF and fullbrightShinyF
2020-03-24SL-12237 Invisible avatars don't need detailed updatesAndrey Kleshchev
2020-03-24SL-12237 Small adjustment to render complexity performanceAndrey Kleshchev
2020-03-24SL-12237 Invisible avatars don't need detailed updatesAndrey Kleshchev
2020-03-24SL-12237 Small adjustment to render complexity performanceAndrey Kleshchev
2020-03-23SL-3475 Add 'Close All Dialogs' option for Script dialogsMnikolenko Productengine
2020-03-20WIP - Make EEP match production.Runitai Linden
2020-03-20SL-2222 FIXED Media Control still offers zoom out when already zoomed outMnikolenko Productengine
2020-03-19SL-12607 FMOD LogoAndrey Kleshchev
2020-03-19Merged in SL-11589 (pull request #44)Michael Pohoreski
SL-11589 Approved-by: Dave Houlton <euclid@lindenlab.com>
2020-03-19Merged in SL-12574_tweak_brightness (pull request #43)Michael Pohoreski
SL-12574 tweak brightness Approved-by: Dave Houlton <euclid@lindenlab.com>
2020-03-19SL-12871 'Only Friends and Groups can call or IM me' setting should be ↵Mnikolenko Productengine
account based.
2020-03-19SL-11445 Fix crash caused by wind cleanupAndrey Kleshchev
2020-03-19Merged master into sl-11445_fmodstudioAndrey Kleshchev
2020-03-19SL-11589 Remove redundant setting vary_texcoord0, cleanup groupingPtolemy
2020-03-19SL-11589 Fix clouds drooping below horizonPtolemy
2020-03-18SL-12574 Cleanup unused final_attenPtolemy
2020-03-18SL-12574 Fix environmentMap being too dark on EEPPtolemy
2020-03-18SL-12574 Add note about duplicated procedurally generated sky texturePtolemy
2020-03-19Merged in euclid_SL-12865 (pull request #42)Dave Houlton
SL-12865, add bias to alpha mask values to avoid 8-bit acne Approved-by: Andrey Kleshchev Approved-by: Michael Pohoreski
2020-03-18SL-12865, add bias to alpha mask values to avoid 8-bit acneDave Houlton
2020-03-18Merged in DRTVTW-440_rel-merge_6.3.9 (pull request #41)Dave Houlton
Merge master (release 6.3.9) into DRTVWR-440
2020-03-18Merge master (v 6.3.9) into DRTVWR-440Dave Houlton
2020-03-18SL-12870 Misleading UI valueAndrey Kleshchev
2020-03-18Merge branch 'master' into DRTVWR-482Andrey Lihatskiy
2020-03-18Merge branch 'master' into DRTVWR-460Andrey Lihatskiy
2020-03-18Merge branch 'master' into DRTVWR-497Andrey Lihatskiy
2020-03-18Merge branch 'master' into DRTVWR-500Andrey Lihatskiy
2020-03-18Increment viewer version to 6.3.9Nat Goodspeed
following promotion of DRTVWR-481
2020-03-17Merged in euclid_SL-10449 (pull request #40)Dave Houlton
SL-10449 remove soft gamma adjustment that breaks Mac GLSL compiler
2020-03-17SL-10449 remove soft gamma adjustment that breaks Mac GLSL compilerDave Houlton
2020-03-17Merged in SL-12574_tweak_brightness (pull request #39)Michael Pohoreski
SL-12574: Tweak sky cubemap to not be as dark to better match Windlight Approved-by: Dave Houlton <euclid@lindenlab.com>
2020-03-17SL-12860 FIXED Enabling 'Only Friends and Groups can call or IM me' still ↵Mnikolenko Productengine
plays New Conversation sound
2020-03-17SL-12858 Fixed bad mergeAndrey Kleshchev
2020-03-16SL-12574: Tweak sky cubemap to not be as dark to better match WindlightPtolemy
2020-03-16SL-12846 OSX fix for missing Thai charactersAndrey Lihatskiy
2020-03-16SL-12846 Thai characters missingAndrey Kleshchev
2020-03-16Merged in davep/DRTVWR-440 (pull request #38)Dave Parks
Add missing fullbrightAtmosTransportFrag stub.