Skip to content
Snippets Groups Projects
  1. Mar 25, 2020
    • Nat Goodspeed's avatar
      DRTVWR-476: Enrich LLExceptions thrown by LLTHROW() with stack trace. · 9ef702db
      Nat Goodspeed authored
      The LLTHROW() abstraction allows us to enrich the subject exception with a
      boost::stacktrace -- without having to propagate the boost/stacktrace.hpp
      header throughout the code base.
      
      To my delight, our existing use of
      boost::current_exception_diagnostic_information() already reports the newly
      added boost::stacktrace information -- we don't have to query it specifically!
      9ef702db
  2. Aug 18, 2016
    • Nat Goodspeed's avatar
      MAINT-5011: Catch unhandled exceptions in LLCoros coroutines. · 4d10172d
      Nat Goodspeed authored
      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.
      4d10172d
    • Nat Goodspeed's avatar
      MAINT-5011: Use BOOST_CURRENT_FUNCTION instead of __PRETTY_FUNCTION__ · c7bf8af6
      Nat Goodspeed authored
      since Visual Studio doesn't know __PRETTY_FUNCTION__, and Boost already has a
      portable macro to Do The Right Thing.
      c7bf8af6
  3. Aug 17, 2016
    • Nat Goodspeed's avatar
      MAINT-5011: Try to enrich catch (...) logging throughout viewer. · 993f54f6
      Nat Goodspeed authored
      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.
      993f54f6
    • Nat Goodspeed's avatar
      MAINT-5011: Use LLTHROW() instead of plain BOOST_THROW_EXCEPTION(). · 5e9d2f57
      Nat Goodspeed authored
      A level of preprocessor indirection lets us later change the implementation if
      desired.
      5e9d2f57
    • Nat Goodspeed's avatar
      MAINT-5011: Add llexception_test.cpp with tests (and conclusions). · 1ed76c38
      Nat Goodspeed authored
      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.
      1ed76c38
  4. Jul 19, 2016
    • Nat Goodspeed's avatar
      MAINT-5011: Introduce LLException base class for viewer exceptions. · 9c49a6c9
      Nat Goodspeed authored
      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.
      9c49a6c9
Loading