Commit Graph

35950 Commits (2f85899bfdf780ff7af73ba3fccd0ddfdb15fae8)

Author SHA1 Message Date
Nat Goodspeed 2f85899bfd Update to boost build 318979 2016-08-25 12:02:02 -04:00
Nat Goodspeed 4d10172d8b MAINT-5011: Catch unhandled exceptions in LLCoros coroutines.
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-18 17:33:44 -04:00
Nat Goodspeed c7bf8af637 MAINT-5011: Use BOOST_CURRENT_FUNCTION instead of __PRETTY_FUNCTION__
since Visual Studio doesn't know __PRETTY_FUNCTION__, and Boost already has a
portable macro to Do The Right Thing.
2016-08-18 11:06:51 -04:00
Nat Goodspeed 0eac1f41f6 MAINT-5011: Catch kdu_exception (aka int) in case it leaks out.
KDU internally throws kdu_exception, which is a typedef for int. It's possible
that such an exception might leak out.

Our usual strategy for unknown exceptions is to catch (...) and let
boost::current_exception_diagnostic_information() handle them. However, for
int (or a class not derived from std::exception), that function will only
shrug and report no information available.

Besides, we want to format kdu_exception specially anyway. First, the KDU
#defines are in hex, so we should report the value in hex. But on inspection,
certain of those hex values are actually multibyte ASCII literals in disguise
-- so also report the byte string value.
2016-08-17 16:42:10 -04:00
Nat Goodspeed 83eb960063 MAINT-5011: Derive image-load exceptions from LLContinueError.
Failure to load an image shouldn't crash the whole viewer.
2016-08-17 15:47:08 -04:00
Nat Goodspeed 993f54f6e9 MAINT-5011: Try to enrich catch (...) logging throughout viewer.
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-17 15:40:03 -04:00
Nat Goodspeed db4f13e7bc MAINT-5011: Clean up indentation from merge of viewer-release. 2016-08-17 11:48:33 -04:00
Nat Goodspeed e72bdc9bc5 Automated merge with ssh://bitbucket.org/lindenlab/viewer-release 2016-08-17 11:41:12 -04:00
Nat Goodspeed 5e9d2f57c8 MAINT-5011: Use LLTHROW() instead of plain BOOST_THROW_EXCEPTION().
A level of preprocessor indirection lets us later change the implementation if
desired.
2016-08-17 11:36:24 -04:00
Nat Goodspeed 1ed76c382e MAINT-5011: Add llexception_test.cpp with tests (and conclusions).
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-08-17 10:45:06 -04:00
Oz Linden 4fb100ac7a increment viewer version to 4.0.8 2016-08-11 15:31:41 -04:00
Oz Linden e4a1b2c940 Added tag 4.0.7-release for changeset 33981d8130f0 2016-08-11 15:31:41 -04:00
AndreyL ProductEngine ec4f5ade76 Merged in oz_linden/viewer-build 2016-08-05 01:02:33 +03:00
Andrey Lihatskiy 8ba372c886 Merged andreyl_productengine/viewer-427 into default 2016-08-05 00:50:53 +03:00
AndreyL ProductEngine f459c67fae Buildfix: brought back LINDEN_J2C_COMMENT_PREFIX 2016-08-05 00:58:09 +03:00
Nat Goodspeed 2ce38c3c98 MAINT-6584: Comment out completely unused LLImageJ2CKDU code.
The only call to the findDiscardLevelsBoundaries() method was commented out
inside initDecode(), with a comment:
        // Merov : Test!! DO NOT COMMIT!!

This was the only caller of copy_tile(), which was the only caller of
copy_block(). Commented out all three of these (biggish!) functions, since I
have no idea what any of them were supposed to do or when it might be useful
to call them. In other words, I can't yet rule out the possibility that I
might have to uncomment them.
2016-08-04 16:20:39 -04:00
AndreyL ProductEngine 6de8631327 Merged in lindenlab/viewer-lynx 2016-08-04 21:11:32 +03:00
andreykproductengine ce36584552 MAINT-6460 getMeshSize crash 2016-08-01 18:58:41 +03:00
andreykproductengine 9b07078b47 MAINT-6460 Crash calculating mesh complexity 2016-08-01 18:00:54 +03:00
andreykproductengine 13f19b1634 Backed out changeset: c21a7e6d9796 2016-08-01 17:25:20 +03:00
AndreyL ProductEngine 974e5e5868 MAINT-6511 Replaced c-style casts with dynamic_cast in llfloater.cpp 2016-07-28 00:15:49 +03:00
AndreyL ProductEngine 2339e759fc MAINT-4327/MAINT-6584 Supress the crash on memory allocation error when decoding J2C images 2016-07-27 05:49:07 +03:00
Nat Goodspeed 03bff896bd MAINT-6584: Use RAII classes to manage helper object lifespans.
Use boost::scoped_ptr instead of raw pointers to LLKDUMemSource,
LLKDUDecodeState, kdu_coords and kdu_dims so cleanup is simpler, and automated
on destruction of LLImageJ2CKDU.

Replace pointer to kdu_codestream with a custom RAII class. kdu_codestream is
itself an opaque handle, so we don't need to add another layer of indirection.
Just wrap it to ensure its destroy() method is reliably called when needed.

Make static instances of LLKDUMessageWarning and LLKDUMessageError
self-register, eliminating the companion static bool and explicit checks in
code.
2016-08-03 20:40:03 -04:00
Oz Linden b779ca0aed fail build on a failed configure 2016-07-26 17:43:39 -04:00
andreykproductengine 1b1f4252e3 MAINT-6460 Crash calculating mesh complexity 2016-07-25 23:43:37 +03:00
Nat Goodspeed acdb050ce5 MAINT-6584: Convert LLImage class hierarchy to standard 'bool'
instead of legacy BOOL.
2016-07-22 11:35:23 -04:00
Nat Goodspeed ab07b1a461 MAINT-6584: Rationalize custom KDU error/warning message classes.
Derive them both from a common base class that does the message logging,
instead of having each handler class log redundantly -- especially since the
put_text() override accepting const kdu_uint16* was simply streaming the
kdu_uint16 pointer to the log file, which would log the hex value of the
pointer.

Although we want a static instance of each of these handler classes, pull it
out rather than nesting the instance within the class itself.
2016-07-22 10:32:53 -04:00
Nat Goodspeed 71b593e88b MAINT-6584: Streamline static LLImageJ2C implementation API.
Specifically, remove unused function pointer types CreateLLImageJ2CFunction,
DestroyLLImageJ2CFunction and EngineInfoLLImageJ2CFunction.

Also eliminate static fallbackDestroyLLImageJ2CImpl() and
fallbackEngineInfoLLImageJ2CImpl(), leaving only static
fallbackCreateLLImageJ2CImpl().

We do need a factory function to instantiate the appropriate LLImageJ2CImpl
subclass, so leave the fallbackCreateLLImageJ2CImpl() link seam in place.

However, given that every known LLImageJ2CImpl subclass is cheap to
instantiate, make getEngineInfo() a pure virtual method on that subclass: the
static LLImageJ2C::getEngineInfo() method can temporarily construct an
instance to query. While we're at it, make getEngineInfo() return std::string
like LLImageJ2C::getEngineInfo(). It's ridiculous that
fallbackEngineInfoLLImageJ2CImpl() implementations constructed a static
std::string and returned its c_str(), only to have LLImageJ2C::getEngineInfo()
construct ANOTHER std::string from the returned const char*.

fallbackDestroyLLImageJ2CImpl() never did anything useful: it merely deleted
the passed LLImageJ2CImpl subclass pointer as the specific subclass type. But
since LLImageJ2CImpl's destructor is virtual, LLImageJ2C's destructor could
simply delete the stored LLImageJ2CImpl*. In fact, make mImpl a
boost::scoped_ptr<LLImageJ2CImpl> so we don't even have to delete it manually.
2016-07-21 16:49:02 -04:00
Nat Goodspeed f09a92f1f3 DRTVWR-427: Remove engineInfoLLImageJ2CKDU(), createLLImageJ2CKDU(),
destroyLLImageJ2CKDU().

These were apparently intended as simple C-style DLL entry points. But as
nobody calls them, and as we decided against building the viewer from DLLs,
they only clutter the code.
2016-07-21 14:29:29 -04:00
Nat Goodspeed 9c49a6c91d MAINT-5011: Introduce LLException base class for viewer exceptions.
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-07-19 16:25:25 -04:00
Nat Goodspeed 47d93e4f65 DRTVWR-418: Remove rogue getMessage() from llsecapi.h exceptions.
The LLProtectedDataException and LLCertException exception classes didn't used
to be derived from std::exception, so they followed their own getMessage()
convention instead of the standard what() convention. Now that they're derived
from std::exception, remove getMessage() and change its few consumers to use
what() instead. Thanks NickyD for suggesting.
2016-07-19 14:08:43 -04:00
Oz Linden 0db98a6308 merge changes for STORM-2133 2016-07-14 11:35:14 -04:00
Nat Goodspeed cefa598e49 MAINT-5011: Per NickyD, make LLCertException::getMessage() const.
Also getCert().

Also LLProtectedDataException::getMessage().
2016-07-14 11:33:29 -04:00
Nat Goodspeed 636ce117bb MAINT-5011: Per NickyD, put PngError in anonymous namespace. 2016-07-14 10:35:56 -04:00
Nat Goodspeed d7c904632b MAINT-5011: On advice from NickyD, say KDUError not KduError.
Also place KDUError into anonymous namespace to emphasize that it's entirely
local to this .cpp file.
2016-07-14 10:26:57 -04:00
andreykproductengine 00a193e740 MAINT-6460 Crash calculating mesh complexity 2016-07-14 15:21:39 +03:00
Ansariel d2cf09e7d2 STORM-2133: VOICE-36 prevents proper shutdown of connector 2016-07-14 10:28:54 +02:00
Nat Goodspeed 2f003fd5a9 MAINT-5011: Throw an actual exception in Force Software Exception.
http://en.cppreference.com/w/cpp/language/throw says of the plain throw syntax:

"This form is only allowed when an exception is presently being handled (it
calls std::terminate if used otherwise)."

On advice from Oz, replace plain 'throw;' with throwing a std::runtime_error.
2016-07-13 14:58:12 -04:00
Nat Goodspeed 21e8352de6 MAINT-5011: Introduce KduError instead of throw/catch const char*.
KduError is derived from std::runtime_error, so the message string becomes its
what() message.
2016-07-13 14:42:44 -04:00
Nat Goodspeed 5b233bba3f MAINT-5011: Remove alarming ll_kdu_error() function
whose body reads:

    // *FIX: This exception is bad, bad, bad. It gets thrown from a
    // destructor which can lead to immediate program termination!
    throw "ll_kdu_error() throwing an exception";

which would be bad indeed... if ll_kdu_error() were ever actually referenced
by anything!
2016-07-13 14:28:45 -04:00
Nat Goodspeed 75149be061 MAINT-5011: Wrap thrown png_const_charp in new PngError class
derived from std::runtime_error.
2016-07-13 14:19:26 -04:00
Nat Goodspeed cd1c64d689 Automated merge with ssh://bitbucket.org/lindenlab/viewer-release 2016-07-13 10:44:40 -04:00
Nat Goodspeed b031b1a625 MAINT-5011: Derive remaining exception classes from std::exception.
In particular:
NotImplemented in llhttpnode.cpp
RelocateError in llupdateinstaller.cpp
LLProtectedDataException, LLCertException and subclasses in llsecapi.h

Had to add no-throw destructor overrides to LLCertException and subclasses
because otherwise clang complains that the implicitly-generated destructor's
exception specification is more lax than the base class's.
2016-07-13 10:43:36 -04:00
andreykproductengine b06d5aeec8 MAINT-6460 Crash calculating mesh complexity 2016-07-12 21:37:45 +03:00
Rider Linden 85c0bec92c Merge 2016-07-12 12:11:01 -07:00
Rider Linden c0407af8ab STORM-2132: Remove obsoleted unique_ptr.hpp, use make_shared for pointer allocation. 2016-07-12 11:07:05 -07:00
Rider Linden c1c9b3d74e MAINT-6565: Grab a shared pointer and encapsulate it into the bind call in place of this. Ensures that the impl is not deleted while the coroutine is active. 2016-07-11 16:33:11 -07:00
andreykproductengine a3f63bce3c MAINT-6534 Resetting scripts via the build menu no longer works on many scripted objects 2016-07-11 16:23:18 +03:00
andreykproductengine 1c7548d3bf MAINT-6448 PERMISSION_DEBIT notification should default to Deny 2016-07-08 15:07:52 +03:00
AndreyL ProductEngine 8d542a46c7 MAINT-6534 Fixed the LLSD validation failure 2016-07-08 18:50:19 +03:00