<feed xmlns='http://www.w3.org/2005/Atom'>
<title>viewer.git/indra/llcommon/llexception.cpp, branch cef_147</title>
<subtitle>Megapahit's fork of the Second Life viewer.
</subtitle>
<id>https://megapahit.org/viewer.git/atom?h=cef_147</id>
<link rel='self' href='https://megapahit.org/viewer.git/atom?h=cef_147'/>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/'/>
<updated>2025-06-03T08:21:58Z</updated>
<entry>
<title>Revert "Promote seh_catcher() et al. to llexception.{h,cpp} for general use."</title>
<updated>2025-06-03T08:21:58Z</updated>
<author>
<name>Erik Kundiman</name>
<email>erik@megapahit.org</email>
</author>
<published>2025-06-03T08:21:58Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=bbe51e86249114cac4716c391e267c499a52847a'/>
<id>urn:sha1:bbe51e86249114cac4716c391e267c499a52847a</id>
<content type='text'>
This reverts commit 71d777ea126e7f02cb46c11bdb606094ca06f75c.
</content>
</entry>
<entry>
<title>Revert "Fix up llexception.h's cross-platform SEH wrapper."</title>
<updated>2025-06-03T08:20:27Z</updated>
<author>
<name>Erik Kundiman</name>
<email>erik@megapahit.org</email>
</author>
<published>2025-06-03T08:20:27Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=9bae19198fdc7bfb71f900cfe6c1982cb2a80e4f'/>
<id>urn:sha1:9bae19198fdc7bfb71f900cfe6c1982cb2a80e4f</id>
<content type='text'>
This reverts commit 5ed8df22cd59680a685c4ada7daa5555bf59d4fe.
</content>
</entry>
<entry>
<title>Fix up llexception.h's cross-platform SEH wrapper.</title>
<updated>2024-05-28T17:22:05Z</updated>
<author>
<name>Nat Goodspeed</name>
<email>nat@lindenlab.com</email>
</author>
<published>2024-05-28T17:22:05Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=5ed8df22cd59680a685c4ada7daa5555bf59d4fe'/>
<id>urn:sha1:5ed8df22cd59680a685c4ada7daa5555bf59d4fe</id>
<content type='text'>
Introduce AlwaysReturn&lt;void&gt; specialization, which always discards any result
of calling the specified callable with specified args.

Derive new Windows_SEH_exception from LLException, not std::runtime_error.

Put the various SEH functions in LL::seh nested namespace, e.g.
LL::seh::catcher() as the primary API.

Break out more levels of Windows SEH handler to work around the restrictions on
functions containing __try/__except.

The triadic catcher() overload now does little save declare a std::string
stacktrace before forwarding the call to catcher_inner(), passing a reference
to stacktrace along with the trycode, filter and handler functions.

catcher_inner() accepts the stacktrace and the three function template
arguments. It contains the __try/__except logic. It calls a new filter_()
wrapper template, which calls fill_stacktrace() before forwarding the call to
the caller's filter function. fill_stacktrace(), in the .cpp file, contains
the logic to populate the stacktrace string -- unless the Structured Exception
is stack overflow, in which case it puts an explanatory string instead.

catcher_inner()'s __except clause passes not only the code, but also the
stacktrace string, to the caller's handler function. It wraps the caller's
handler function in always_return&lt;rtype&gt;(), where rtype is the type returned
by the trycode function. This allows a handler to return a value, while also
supporting the void handler case, e.g. one that throws a C++ exception. (This
is why we need AlwaysReturn&lt;void&gt;: some trycode() functions are themselves
void.)

For the dyadic catcher() overload, introduce common_filter() containing the
logic to distinguish a C++ exception from any other kind of Structured
Exception. The fact that the stacktrace is captured before the filter function
is called should permit capturing a stacktrace for a C++ exception as well as
for most other Structured Exceptions.

As before, the monadic catcher() overload supplies the rethrow() handler, in
the .cpp file.

Change existing calls from seh_catcher() to LL::seh::catcher().
</content>
</entry>
<entry>
<title>Promote seh_catcher() et al. to llexception.{h,cpp} for general use.</title>
<updated>2024-05-24T21:34:04Z</updated>
<author>
<name>Nat Goodspeed</name>
<email>nat@lindenlab.com</email>
</author>
<published>2024-05-24T21:34:04Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=71d777ea126e7f02cb46c11bdb606094ca06f75c'/>
<id>urn:sha1:71d777ea126e7f02cb46c11bdb606094ca06f75c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>#824 Process source files in bulk: replace tabs with spaces, convert CRLF to LF, and trim trailing whitespaces as needed</title>
<updated>2024-04-29T04:56:09Z</updated>
<author>
<name>Andrey Lihatskiy</name>
<email>alihatskiy@productengine.com</email>
</author>
<published>2024-04-29T04:43:28Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=1b68f71348ecf3983b76b40d7940da8377f049b7'/>
<id>urn:sha1:1b68f71348ecf3983b76b40d7940da8377f049b7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>SL-17896 Don't crash silently if files are missing or out of memory</title>
<updated>2024-03-04T22:29:35Z</updated>
<author>
<name>Andrey Kleshchev</name>
<email>andreykproductengine@lindenlab.com</email>
</author>
<published>2024-01-03T20:57:28Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=78ce375dda587cbc86ade15a4d564a469e6db9d3'/>
<id>urn:sha1:78ce375dda587cbc86ade15a4d564a469e6db9d3</id>
<content type='text'>
Under debug LL_ERRS will show a message as well, but release won't show
anything and will quit silently so show a notification when applicable.
</content>
</entry>
<entry>
<title>SL-17077 Ensure profiling is disabled if gpu_benchmark fails.  Log the source of the real crash for when the viewer inevitably crashes later.</title>
<updated>2022-03-25T18:05:50Z</updated>
<author>
<name>Dave Parks</name>
<email>davep@lindenlab.com</email>
</author>
<published>2022-03-25T18:05:50Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=9b2df75c87d8ef06177f1591716cbe913b66de1e'/>
<id>urn:sha1:9b2df75c87d8ef06177f1591716cbe913b66de1e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>SL-14347 Crash at ChoosePixelFormat SEH</title>
<updated>2020-12-01T16:22:24Z</updated>
<author>
<name>Andrey Kleshchev</name>
<email>andreykproductengine@lindenlab.com</email>
</author>
<published>2020-12-01T16:21:43Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=bb4d02446fa215520a11f219ebca453d2dea0388'/>
<id>urn:sha1:bb4d02446fa215520a11f219ebca453d2dea0388</id>
<content type='text'>
</content>
</entry>
<entry>
<title>DRTVWR-476: On Windows, use prebuilt Boost.Stacktrace.</title>
<updated>2020-03-25T23:24:25Z</updated>
<author>
<name>Nat Goodspeed</name>
<email>nat@lindenlab.com</email>
</author>
<published>2019-12-11T21:36:08Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=79f3bda1a5570041d0db4d12c8bdb7482d194437'/>
<id>urn:sha1:79f3bda1a5570041d0db4d12c8bdb7482d194437</id>
<content type='text'>
</content>
</entry>
<entry>
<title>DRTVWR-476: Enrich LLExceptions thrown by LLTHROW() with stack trace.</title>
<updated>2020-03-25T23:21:16Z</updated>
<author>
<name>Nat Goodspeed</name>
<email>nat@lindenlab.com</email>
</author>
<published>2019-11-19T01:22:45Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=9ef702db1149b6961a4c9b158bf203007c0d3a92'/>
<id>urn:sha1:9ef702db1149b6961a4c9b158bf203007c0d3a92</id>
<content type='text'>
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!
</content>
</entry>
</feed>
