summaryrefslogtreecommitdiff
path: root/indra/newview/llchathistory.cpp
AgeCommit message (Collapse)Author
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.
2018-06-08MAINT-8742 Crashes at draw and getHandleandreykproductengine
2018-04-17MAINT-8498 Fixed item offers not appearing after friednship offerAndrey Kleshchev
2017-07-24MAINT-7629 FIXED Crash in LLSpeakerMgr::findSpeaker(LLUUID const &)Mnikolenko ProductEngine
2017-05-17MAINT-6805 Fixed Right-click menus in the right and left panes of the ↵andreykproductengine
Conversations windows are different
2017-02-15MAINT-7118 Swapping legacy people API with new cacheandreykproductengine
2016-05-18MAINT-2129 "Block" button doesn't become disabledandreykproductengine
2016-05-19Merged in lindenlab/viewer-releaseAndreyL ProductEngine
2016-04-20MAINT-2129 "Block" button doesn't become disabled in remote object inspector ↵andreykproductengine
after object has been added to block list
2016-01-15merge changes for 4.0.1-releaseOz Linden
2015-11-10remove execute permission from many files that should not have itOz Linden
2015-10-15MAINT-925 FIXED Objects called "Second Life" are unclickable & unmuteable ↵Mnikolenko ProductEngine
via local chat
2015-06-11MAINT-14 FIXED Region message logged into nearby chat log has duplicated ↵Mnikolenko ProductEngine
sender name
2015-06-08MAINT-14 FIXED Treat region message like a system message, but also show ↵Mnikolenko ProductEngine
sender name.
2015-03-31MAINT-5020 FIXED Determine the need to use bracket via chat source.Mnikolenko ProductEngine
2014-10-27MAINT-4597 FIXED Show emoted name according to name settings in preferences.Mnikolenko ProductEngine
2014-05-02MAINT-4009: Patching the memory leak occurring from the info icons that ↵Stinson Linden
appear when hovering over a chat history item.
2014-03-12merge with releaseRichard Linden
2014-01-10Revert earlier back-out for MAINT-535 ... it's back insimon
2014-01-07Revert changes made for MAINT-535 to test in a release cohort.simon
2013-12-02merge with releaseRichard Linden
2013-11-25Merge - doh!simon
2013-11-12MAINT-3068 FIXED "Request Teleport" menu item is added to context menu.Mnikolenko ProductEngine
2013-11-11Automated merge with http://bitbucket.org/lindenlab/viewer-releaseRichard Linden
2013-11-11Merge 3.6.11 for RC-abilityGraham Linden
2013-10-25Fix release merge issues (included upstream changes not yet in release from ↵Graham Linden
bear)
2013-10-15renamed TimeBlock to BlockTimerStatHandleRichard Linden
2013-10-08merge from viewer-releaseRichard Linden
2013-09-09merge with viewer-releaseRichard Linden
2013-09-09Merge downstream code with viewer-releasesimon_linden
2013-09-05changed fast timer over to using macroRichard Linden
another attempt to move mem stat into base class
2013-09-04MAINT-3073 ([CHUIBUG](You) feature is irritating, especially for emotes)mberezhnoy
2013-08-23MAINT-2575 FIXED Resident can accept unlimited number of friendship requests ↵maksymsproductengine
if they were sent before his first accept
2013-08-29MAINT-3068 FIXED Inconsistent option menus on resident names in ↵dmitry
Conversations floater
2013-10-22MAINT-535 'trust model' is added for secondlife:// URLs in wiki style links. ↵Mnikolenko ProductEngine
Chat history is marked as untrusted source now.
2013-10-15MAINT-3305 ('Chat history' is enabled in contex menu for yourself.)MaximB ProductEngine
2013-06-13CHUI-809 (Right-click menu on user name in compat chat mode doesn't have "IM")mberezhnoy
Added callback for friendship checking
2013-04-19merge changes for DRTVWR-294Oz Linden
2013-04-01CHUI-886 (Time in front of the name is not displayed when the Conversations ↵mberezhnoy
size is reduced to a minimum.)
2013-03-29Update Mac and Windows breakpad builds to latestGraham Madarasz
2013-03-12CHUI-809 FIXED Changes in menu items to make them consistent. Do not start ↵Mnikolenko ProductEngine
IM if selected person is self.
2013-03-11CHUI-815 FIXED Display whispered text in italics and shouted text as boldMnikolenko ProductEngine
2013-01-30Pull merge from lindenlab/viewer-developementMerov Linden
2012-12-17CHUI-580 : WIP : Added disconnect of callbacks once they're called to ↵Merov Linden
prevent filling up the callback queue
2012-12-17CHUI-580 : WIP : Protect callback connections passed to ↵Merov Linden
LLAvatarNameCache::get() where necessary
2012-12-05CHUI-580 : WIP : Change the display name cache system, deprecating the old ↵Merov Linden
protocol and using the cap (People API) whenever available. Still has occurence of Resident as last name to clean up.
2012-11-19 CHUI-423 (User typing /me something in chat does not show correctly in ↵MaximB ProductEngine
italics on outgoing or incoming chat)
2012-11-02CHUI-475: Ensuring that objects that query the avatar name cache with a ↵William Todd Stinson
callback store the connection and disconnect on object destruction. This should help resolve some of the heap corruption we are seeing.
2012-10-16Move const kw locationJeff (Gioffredo Linden)
2012-10-16Make getValue const to fix Windows builds - and be more robustJeff (Gioffredo Linden)