summaryrefslogtreecommitdiff
path: root/indra/llcommon
AgeCommit message (Collapse)Author
2016-08-26MAINT-5011: Add comments to LLCoros::toplevel() exception handlers.Nat Goodspeed
2016-08-25MAINT-5011: Remove unreferenced param name to avoid fatal warningNat Goodspeed
2016-08-18MAINT-5011: Catch unhandled exceptions in LLCoros coroutines.Nat Goodspeed
Wrap coroutine call in try/catch in top-level coroutine wrapper function LLCoros::toplevel(). Distinguish exception classes derived from LLContinueError (log and continue) from all others (crash with LL_ERRS). Enhance CRASH_ON_UNHANDLED_EXCEPTIONS() and LOG_UNHANDLED_EXCEPTIONS() macros to accept a context string to supplement the log message. This lets us replace many places that called boost::current_exception_diagnostic_information() with LOG_UNHANDLED_EXCEPTIONS() instead, since the explicit calls were mostly to log supplemental information. Provide supplemental information (coroutine name, function parameters) for some of the previous LOG_UNHANDLED_EXCEPTIONS() calls. This information duplicates LL_DEBUGS() information at the top of these functions, but in a typical log file we wouldn't see the LL_DEBUGS() message. Eliminate a few catch (std::exception e) clauses: the information we get from boost::current_exception_diagnostic_information() in a catch (...) clause makes it unnecessary to distinguish. In a few cases, add a final 'throw;' to a catch (...) clause: having logged the local context info, propagate the exception to be caught by higher-level try/catch. In a couple places, couldn't resist reconciling indentation within a particular function: tabs where the rest of the function uses tabs, spaces where the rest of the function uses spaces. In LLLogin::Impl::loginCoro(), eliminate some confusing comments about an array of rewritten URIs that date back to a long-deleted implementation.
2016-08-18MAINT-5011: Use BOOST_CURRENT_FUNCTION instead of __PRETTY_FUNCTION__Nat Goodspeed
since Visual Studio doesn't know __PRETTY_FUNCTION__, and Boost already has a portable macro to Do The Right Thing.
2016-08-17MAINT-5011: Try to enrich catch (...) logging throughout viewer.Nat Goodspeed
Turns out we have a surprising number of catch (...) clauses in the viewer code base. If all we currently do is LL_ERRS() << "unknown exception" << LL_ENDL; then call CRASH_ON_UNHANDLED_EXCEPTION() instead. If what we do is LL_WARNS() << "unknown exception" << LL_ENDL; then call LOG_UNHANDLED_EXCEPTION() instead. Since many places need LOG_UNHANDLED_EXCEPTION() and nobody catches LLContinueError yet, eliminate LLContinueError& parameter from LOG_UNHANDLED_EXCEPTION(). This permits us to use the same log message as CRASH_ON_UNHANDLED_EXCEPTION(), just with a different severity level. Where a catch (...) clause actually provides contextual information, or makes an error string, add boost::current_exception_diagnostic_information() to try to figure out actual exception class and message.
2016-08-17Automated merge with ssh://bitbucket.org/lindenlab/viewer-releaseNat Goodspeed
2016-08-17MAINT-5011: Use LLTHROW() instead of plain BOOST_THROW_EXCEPTION().Nat Goodspeed
A level of preprocessor indirection lets us later change the implementation if desired.
2016-08-17MAINT-5011: Add llexception_test.cpp with tests (and conclusions).Nat Goodspeed
llexception_test.cpp is an unusual test source in that it need not be verified on every build, so its invocation in indra/llcommon/CMakeLists.txt is commented out with that remark. Its purpose is to help a developer decide what base class(es) to use for LLException, how to throw and how to catch. Our current conclusions are written up as comments in llexception_test.cpp. Added CRASH_ON_UNHANDLED_EXCEPTION() and LOG_UNHANDLED_EXCEPTION() macros to llexception.h -- macros to log __FILE__, __LINE__ and __PRETTY_FUNCTION__ of the catch site. These invoke functions in llexception.cpp so we don't need to #include llerror.h for every possible catch site.
2016-07-19MAINT-5011: Introduce LLException base class for viewer exceptions.Nat Goodspeed
This also introduces LLContinueError for exceptions which should interrupt some part of viewer processing (e.g. the current coroutine) but should attempt to let the viewer session proceed. Derive all existing viewer exception classes from LLException rather than from std::runtime_error or std::logic_error. Use BOOST_THROW_EXCEPTION() rather than plain 'throw' to enrich the thrown exception with source file, line number and containing function.
2016-06-30DRTVWR-418: Unify control flow through LLAppViewer across platforms.Nat Goodspeed
The LLApp API used to consist of init(), mainLoop(), cleanup() methods. This makes sense -- but on Mac that structure was being subverted. The method called mainLoop() was in fact being called once per frame. There was initialization code in the method, which (on Mac) needed to be skipped with an already-initialized bool. There was a 'while' loop which (on Mac) needed to be turned into an 'if' instead so the method would return after every frame. Rename LLApp::mainLoop() to frame(). Propagate through subclasses LLAppViewer and LLCrashLogger. Document the fact that frame() returns true to mean "done." (This was always the case, but had to be inferred from the code.) Rename the Mac Objective-C function mainLoop to oneFrame. Rename the C++ free function it calls from runMainLoop() to pumpMainLoop(). Add comments to llappdelegate-objc.mm explaining (inferred) control flow. Change the Linux viewer main() and the Windows viewer WINMAIN() from a single LLAppViewer::mainLoop() call to repeatedly call frame() until it returns true. Move initialization code from the top of LLAppViewer::frame() to the init() method, where it more properly belongs. Remove corresponding mMainLoopInitialized flag (and all references) from LLAppViewer. Remove 'while (! LLApp::isExiting())' (or on Mac, 'if (! LLApp::isExiting())') from LLAppViewer::frame() -- thus unindenting the whole body of the 'while' and causing many lines of apparent change. (Apologies to reviewers.) There are four LLApp states: APP_STATUS_RUNNING, APP_STATUS_QUITTING, APP_STATUS_STOPPED and APP_STATUS_ERROR. Change LLAppViewer::frame() return value from (isExiting()) (QUITTING or ERROR) to (! isRunning()). I do not know under what circumstances the state might transition to STOPPED during a frame() call, but I'm quite sure that if it does, we don't want to call frame() again. We only want a subsequent call if the state is RUNNING. Also rename mainLoop() method in LLCrashLogger subclasses LLCrashLoggerWindows, LLCrashLoggerMac, LLCrashLoggerLinux. Of course it's completely up to the frame() method whether to yield control; none of those in fact do. Honor protocol by returning true (frame() is done), even though each one's main() caller ignores the return value. In fact LLCrashLoggerWindows::mainLoop() wasn't using the return protocol correctly anyway, returning wParam or 0 or 1 -- possibly because the return protocol was never explicitly documented. It should always return true: "I'm done, don't call me again."
2016-06-01MAINT-6446 Correct password length handlingandreykproductengine
2016-05-20Merged in lindenlab/viewer-lynxAndreyL ProductEngine
2016-05-18MAINT-6409 invisiprims should be preloadedandreykproductengine
2016-05-06merge 4.0.4-release and MAINT-5974Oz Linden
2016-05-06merge changes for 4.0.4-releaseOz Linden
2016-04-26MAINT-6336: Initialize TempBoundListener with constructorRider Linden
2016-04-26MAINT-6336: Put the timeout upstream of the suspending pump and fire the ↵Rider Linden
timeout it. Also some cleanup on LLSD construction in vivox.
2016-04-22MAINT-6336: Centralize waiting on event pump with a timeout. Shorten the ↵Rider Linden
lifespan of a timeout event pump lifespan to be no longer than necessary. Change all references to the LLEventTimer to instead uses the centralized version.
2016-04-21MAINT-6317 [QuickGraphics-RC] Some rigged mesh attachments render fully on ↵ruslantproductengine
jellybaby avatars when ALM is enabled FIXED - remove global identifier for the black texture - add black texture 2x2x3 localy on apllication startup - add special flag to LLViewerFetchedTexture for protect from removing
2016-04-20MAINT-6336: Crasher showing up in voice was a Bound Listener that should ↵Rider Linden
have been a Temp Bound listener.
2016-04-20MAINT-6322 fix merge error that prevented crash dumps from being located for ↵Oz Linden
upload (and add better logging)
2016-04-20MAINT-6322 fix merge error that prevented crash dumps from being located for ↵Oz Linden
upload (and add better logging)
2016-04-04merge with 4.0.3-releaseOz Linden
2016-03-22fix merge error for specular rendering on impostorsOz Linden
2016-03-17MergeRider Linden
2016-03-16merge changes for DRTVWR-417Oz Linden
2016-03-07merge DRTVWR-398 build cleanup fixesOz Linden
2016-02-19MAINT-5022 [QuickGraphics] Materials should not be applied to simple impostersruslantproductengine
Fixe based on that texture with assetd id: "3b39cc01-c2d1-e194-1181-e4404978b20c" will exist on data server.
2016-01-04MAINT-5976: On Linux builds do not specify explict for bool conversion operator.Rider Linden
2015-12-22MAINT-5976: Removed temp code to simulate Nat's fix. Now redundant.Rider Linden
2015-12-21Merged in nat_linden/viewer-azumarill-vivox (pull request #2)Rider Linden
MAINT-5976: Fix bug in LLCoros::set_consuming() mechanism.
2015-12-18And more linux linkingRider Linden
2015-12-18MAINT-5976: Fix bug in LLCoros::set_consuming() mechanism.Nat Goodspeed
The original implementation of set_consuming() involved a bool* pointing to a local bool in VoidListener::operator()()'s stack frame. postAndSuspend() would set that bool (through the pointer) as soon as it returned from suspension. The trouble with that is that LLEventMailDrop potentially calls its new listener (fulfilling the future) immediately in the listen_impl() override -- in other words, way up at the top of postAndSuspend(), well before the code that sets the relevant bool. Instead, make the adapter formerly known as VoidListener bind the coroutine's get_consuming() value at adapter construction time (before listening on the LLEventPump), so that its operator()() has the coroutine's correct get_consuming() value to return. Eliminating the bool* makes the code both simpler AND more correct! This change makes that adapter very specific to coroutine usage. Rename it FutureListener and migrate it from lleventcoros.h into the .cpp file. Nobody else was using it anyway. Make corresponding changes to postAndSuspend2() and its WaitForEventOnHelper class -- whose name no longer corresponds to the function as it used to. Rename that one FutureListener2. The new FutureListener functionality, common to both these adapters, makes it useful to derive FutureListener2 from FutureListener. Introduce llmake(), a generic function to deduce template type arguments from function parameter types. This allows us to remove the voidlistener() and wfeoh() helper functions. Hiding VoidListener broke one of the lleventcoro_test.cpp tests. But that test was sort of a lame recap of an earlier implementation of postAndSuspend(), based on LLEventPump events. Recast that test to illustrate how to use a coroutine future to suspend a coroutine for something other than an LLEventPump. But that rubbed my nose in the fact that we MUST wrap future's context switching with proper management of the current coroutine. Introduce LLCoros::Future<T>, which wraps boost::dcoroutines::future<T>. Use LLCoros::Future<T> in postAndSuspend() and postAndSuspend2().
2015-12-17MAINT-5977: Check get_consuming() as well as listener return when draining ↵Rider Linden
queue.
2015-12-17MAINT-5977: Finish implementation of MailBox event pump type for guaranteed ↵Rider Linden
delivery
2015-12-17Mergerider
2015-12-17MAINT-5976: Adding MailDrop type event Queuerider
2015-12-16MAINT-5976: Introduce LLCoros::set_consuming(bool).Nat Goodspeed
set_consuming(true) tells each postAndSuspend() call to consume the event for which it is suspending.
2015-12-04Initial changes for Vivox/Azumarill merge. Lots of temporary code and ↵Rider Linden
conditional compile switches. Begin switch from statemachine to coroutine.
2015-11-20MAINT-5835: Cut down on log spam from coros and voice.Rider Linden
2015-11-20WOLF-300: Re-enable llleap_test with the smaller data volume.Nat Goodspeed
2015-11-18WOLF-300: Try using a smaller data volume for LLLeap tests on Windows.Nat Goodspeed
2015-11-10remove execute permission from many files that should not have itOz Linden
2015-11-02Automated merge with ssh://bitbucket.org/lindenlab/viewer-releaseNat Goodspeed
2015-10-31Re-enable llprocess tests, leaving only llleap tests commented out.Nat Goodspeed
2015-10-31Automated merge with ssh://bitbucket.org/lindenlab/viewer-releaseNat Goodspeed
2015-10-17Suppress specifically the LLProcess and LLLeap integration testsNat Goodspeed
because of Oz's suspicion that they may, in some mysterious way, contribute to code-signing failures.
2015-10-19Merge from viewer release.Rider Linden
2015-10-13merge changes for MAINT-4734pavelkproductengine
2015-10-13merge changes for 3.8.5-releaseOz Linden