summaryrefslogtreecommitdiff
path: root/indra
AgeCommit message (Collapse)Author
2021-10-07SL-16024: Add LL::WorkQueue for passing work items between threads.Nat Goodspeed
A typical WorkQueue has a string name, which can be used to find it to post work to it. "Work" is a nullary callable. WorkQueue is a multi-producer, multi-consumer thread-safe queue: multiple threads can service the WorkQueue, multiple threads can post work to it. Work can be scheduled in the future by submitting with a timestamp. In addition, a given work item can be scheduled to run on a recurring basis. A requesting thread servicing a WorkQueue of its own, such as the viewer's main thread, can submit work to another WorkQueue along with a callback to be passed the result (of arbitrary type) of the first work item. The callback is posted to the originating WorkQueue, permitting safe data exchange between participating threads. Methods are provided for different kinds of servicing threads. runUntilClose() is useful for a simple worker thread. runFor(duration) devotes no more than a specified time slice to that WorkQueue, e.g. for use by the main thread.
2021-10-07SL-16024: Make LLCond::get() lock and return by value.Nat Goodspeed
Its previous behavior, returning a const reference without locking, was wrong: it could return a reference to an object in an inconsistent state if it was concurrently being modified on another thread. Locking the mutex and returning a copy by value is the correct behavior.
2021-10-07SL-16024: Adapt llinstancetracker_test.cpp to getInstance() change.Nat Goodspeed
2021-10-07SL-16024: Return shared_ptr from LLInstanceTracker::getInstance().Nat Goodspeed
It feels wrong to return a dumb LLInstanceTracker subclass* from getInstance() when we use std::shared_ptr and std::weak_ptr internally. But tweak consumers to use 'auto' or LLInstanceTracker::ptr_t in case we later revisit this decision. We did add a couple get() calls where it's important to obtain a dumb pointer.
2021-10-06SL-16024: Work around VS bug regarding base-class enum.Nat Goodspeed
2021-10-06SL-16024: Fix ThreadSafeSchedule::tryPopFor(), tryPopUntil().Nat Goodspeed
ThreadSafeSchedule::tryPopUntil() (and therefore tryPopFor()) was simply delegating to LLThreadSafeQueue::tryPopUntil(), with an adjusted timeout since we want to wake up as soon as the head item, if any, becomes ready. But then we have to loop back to retry the pop to actually deal with that head item. In addition, ThreadSafeSchedule::popWithTime() was spinning rather than properly blocking on a timed condition variable. Fixed.
2021-10-05SL-16024: Add ThreadSafeSchedule, a timestamped LLThreadSafeQueue.Nat Goodspeed
ThreadSafeSchedule orders its items by timestamp, which can be passed either implicitly or explicitly. The timestamp specifies earliest delivery time: an item cannot be popped until that time. Add initial tests. Tweak the LLThreadSafeQueue base class to support ThreadSafeSchedule: introduce virtual canPop() method to report whether the current head item is available to pop. The base class unconditionally says yes, ThreadSafeSchedule says it depends on whether its timestamp is still in the future. This replaces the protected pop_() overload accepting a predicate. Rather than explicitly passing a predicate through a couple levels of function call, use canPop() at the level it matters. Runtime behavior that varies depending on an object's leaf class is what virtual functions were invented for. Give pop_() a three-state enum return so pop() can distinguish between "closed and empty" (throws exception) versus "closed, not yet drained because we're not yet ready to pop the head item" (waits). Also break out protected tryPopUntil_() method, the body logic of tryPopUntil(). The public method locks the data structure, the protected method requires that its caller has already done so. Add chrono.h with a more full-featured LL::time_point_cast() function than the one found in <chrono>, which only converts between time_point durations, not between time_points based on different clocks.
2021-10-04SL-16024: Don't use a lambda as default arg for universal reference.Nat Goodspeed
Instead, break out a separate pop_() method that explicitly provides the lambda to the real pop_() implementation.
2021-10-04SL-16024: LLThreadSafeQueue enhancementsNat Goodspeed
Add LL::PriorityQueueAdapter, a wrapper for std::priority_queue to make its API more closely resemble std::queue for drop-in use as LLThreadSafeQueue's underlying QueueT container. Support move-only element types. Factor out some implementation redundancy: wrap actual push semantics as push_(), actual pop semantics as pop_(). push(), tryPush() and tryPushUntil() now call push_(); pop(), tryPop() and tryPopUntil() now call pop_(). Break out tryLock() and tryLockUntil() methods that, if they can lock, run the passed callable. Then tryPush(), tryPushUntil(), tryPop() and tryPopUntil() pass lambdas containing the meat of the original method body to tryLock() or tryLockUntil(), as appropriate.
2021-10-04SL-16024: Introduce tuple.h with tuple_cons(), tuple_cdr().Nat Goodspeed
These functions allow prepending or removing an item at the left end of an arbitrary tuple -- for instance, to add a sequence key to a caller's data, then remove it again when delivering the original tuple.
2021-10-01SL-16024: Enhance LLThreadSafeQueue for use with WorkQueue.Nat Goodspeed
First, parameterize LLThreadSafeQueue's queue type. This allows us to substitute (e.g.) a std::priority_queue for a particular instance. Use std::queue for the default queue type, changing the operations invoked on the queue type from std::deque methods to std::queue methods. Rename published methods from (e.g.) pushFront() and popBack() to simple push() and pop(), retaining legacy names as aliases. Not only are the overt Front and Back unnecessary; they're the opposite of how std::queue uses std::deque or std::list, so they only confuse the reader. Break out tryPushUntil() method. We already use that logic internally to tryPushFor(), so it's just as easy to publish it as its own entry point. Add tryPopFor() and tryPopUntil() to allow limiting the time we'll wait for a queue item to become available.
2021-08-09Increment viewer version to 6.4.23Nat Goodspeed
following promotion of DRTVWR-531
2021-07-19Merge with Master after Viewer Release (also fixed some glaring automerge ↵Callum Prentice
screw ups)
2021-07-14Increment viewer version to 6.4.22Nat Goodspeed
following promotion of DRTVWR-516
2021-07-12Fix for SL-15560 pages with undefined html render with gray background ↵Callum Prentice
instead of white in CEF v91
2021-07-13Revert "SL-15434 Change default landmark destination"Andrey Kleshchev
This reverts commit efc8b268a2686a86c0975b4b3f67ef821a416d98.
2021-07-12Fix for SL-15559 PDF files do not load in CEF v91Callum Prentice
2021-07-01SL-15512 Update text in the Favorites Bar and Favorites windowMnikolenko Productengine
2021-06-30SL-15434 Change default landmark destinationAndrey Kleshchev
2021-06-30SL-15434 The 'Add to my Landmarks' star icon is not marked in the Top menu barAndrey Kleshchev
2021-06-25Merge branch 'master' into DRTVWR-516-maintAndrey Lihatskiy
# Conflicts: # indra/newview/app_settings/settings.xml # indra/newview/llvoicevivox.cpp
2021-06-24Merge branch 'master' into DRTVWR-531Callum Prentice
2021-06-24Increment viewer version to 6.4.21Nat Goodspeed
following promotion of DRTVWR-518
2021-06-24SL-10297 windows local build fixAndrey Kleshchev
win_crash_logger will be fully removed in D520, for now just fixing local relwithdebinfo build
2021-06-23SL-15292 waitForChannel crash #4Andrey Kleshchev
2021-06-23SL-15292 waitForChannel crash #3Andrey Kleshchev
2021-06-23SL-15292 waitForChannel crash #2Andrey Kleshchev
2021-06-17Fix for: SL-15422 Update version of CEF used in the Viewer to 91.0.4472.101. ↵Callum Prentice
Also includes a tweak to viewer_manifest.py to handle some CEF file changes"
2021-06-16SL-15406 Removed text below initial login screen screenshotsAndrey Kleshchev
2021-06-11Fix for SL-15389 -- Pull in the patch to add the Akamai cert fix specified ↵Callum Prentice
in SL-15370
2021-06-10Fix for SL-15381 Import Vivox VAD voice fixes into 'Viewer UI changes' branchCallum Prentice
2021-06-09SL-15363 how_to on older viewers is forced to persistAndrey Kleshchev
Older how_to floater is not set to persist in between sessions and gets stuck, ranamed new how_to into guidebook to avoid the issue
2021-06-07Merge branch 'master' into DRTVWR-531Callum Prentice
2021-06-08SL-15168 A bit of debug loggingAndrey Kleshchev
2021-06-07Merge branch 'master' into DRTVWR-518-uiAndrey Lihatskiy
2021-06-07Merge branch 'master' into DRTVWR-516-maintAndrey Lihatskiy
2021-06-07Increment viewer version to 6.4.20Nat Goodspeed
following promotion of DRTVWR-525
2021-06-04SL-15350 Update images for New User viewer log in pageAndrey Lihatskiy
2021-06-03SL-15292 waitForChannel crashAndrey Kleshchev
2021-06-03SL-15272 Bugsplat crashes at condition wait()Andrey Kleshchev
Made sure all waits will be triggered, won't loop back and that in case of http queue it had some time to trigger
2021-05-27SL-15319 FIXED Crash in LLFloaterCreateLandmark::onCancelClickedMnikolenko Productengine
2021-05-26SL-15299 SL-15313 BUG-230802 Revert BOM fix causing issues with avatar alpha ↵Dave Houlton
masks. Revert "SL-12069 Issues with bakes-on-mesh and alpha modes" This reverts commit 5691d302ef876a7e6fb6861441f14e5e7f0c7735.
2021-05-25SL-15285 Restore 'drop item' functionality in right click menuAndrey Kleshchev
2021-05-25Fix duplicate name is XML (FS:Ansarial)Callum Prentice
2021-05-25SL-15298 Move Landmark's Edit buttonAndrey Kleshchev
2021-05-21Merge branch 'sl-10297' into DRTVWR-516-maintAndrey Lihatskiy
2021-05-19Fix for SL-12320 The Viewer functionality is broken with an in-viewer ↵Callum Prentice
enabled proxy - there isn't an obvious way to set proxy information for CEF alone and QA asserts that the system setting is used so we are removing the proxy UI from the preferences floater. I purposely left everything else in place (config floater, media plugin messages etc.) so we can consider adding CEF specific support one day.
2021-05-19SL-15268 update the description of the 'VivoxVadSensitivity' debug settingMnikolenko Productengine
2021-05-18Pull in updated Dullahan and use it for for: Fix SL-14888 Media on a Prim ↵Callum Prentice
should not show JS (about to unload) popups
2021-05-14Fixes SL-14897 Disable Flash support in the embedded browserCallum Prentice