Commit Graph

305 Commits (5dcd81c15507ad8f487e5727bc7a94de82f6fb45)

Author SHA1 Message Date
Nat Goodspeed 0c2442eb68 MAINT-5011: Fix abbreviateFile() test to run under .../indra/ path.
This particular test relied on there being exactly one instance of the string
"indra" in the source file's __FILE__ path -- which is usually true, but not
if the developer clones the viewer source repo under a parent directory whose
path itself contains "indra". Fix to handle any number of occurrences.
2016-08-29 18:48:47 +00: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
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
Oz Linden 9be58e915a merge with 4.0.3-release 2016-04-04 15:53:09 -04:00
Rider Linden b8c1976460 Merge 2016-03-17 13:14:21 -07:00
Oz Linden 31f3db0291 merge changes for DRTVWR-417 2016-03-16 13:08:06 -04:00
Nat Goodspeed 2ee22ed264 MAINT-5976: Fix bug in LLCoros::set_consuming() mechanism.
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-18 18:06:32 -05:00
Nat Goodspeed 6a062089b8 MAINT-5976: Introduce LLCoros::set_consuming(bool).
set_consuming(true) tells each postAndSuspend() call to consume the event for
which it is suspending.
2015-12-16 17:13:04 -05:00
Nat Goodspeed 2ccbb77f3c WOLF-300: Try using a smaller data volume for LLLeap tests on Windows. 2015-11-18 17:22:57 -05:00
Oz Linden c8726aba30 remove execute permission from many files that should not have it 2015-11-10 09:48:56 -05:00
Rider Linden a8ab084678 Tweek to naming postEventAndSuspend -> postAndSuspend 2015-09-18 11:54:38 -07:00
Rider Linden 75c6549fde Set consistent terminology for yield/wait -> suspend for coroutines. 2015-09-18 11:39:22 -07:00
Nat Goodspeed 68f42e4e10 MAINT-5351: Finish cleaning up messy merge from backing out backout 2015-07-10 19:44:47 -04:00
Nat Goodspeed 9bde72f784 Automated merge with file:///Users/nat/linden/maint-4952-v-t-u 2015-07-10 19:37:19 -04:00
Nat Goodspeed 391d9a367b Merge restore of more selfless changes 2015-07-10 19:34:20 -04:00
Nat Goodspeed efa9a0f99c Backed out changeset bab1000e1b2d: restore 'selfless' changes 2015-07-10 19:30:10 -04:00
Nat Goodspeed 9809f59fa9 Merge restore of selfless changes 2015-07-10 16:54:05 -04:00
Nat Goodspeed 6f9f89ee71 Backed out changeset 6e1fa9518747: reapply 'selfless' changes 2015-07-10 16:47:07 -04:00
Rider Linden b34163be5e Merge 2015-07-07 11:44:15 -07:00
Rider Linden 247eb0c9c3 Backout selfles merge 738255dbbfd679d9e615baab3398e5e345bbb3c5 2015-07-07 19:41:27 +01:00
Rider Linden d8c02a2838 Apply reverse patch 2015-07-07 19:37:01 +01:00
Rider Linden 4c1d47d4ae Backed out selfless merge 2015-07-07 19:31:34 +01:00
Nat Goodspeed 33007699cc Automated merge with ssh://bitbucket.org/nat_linden/viewer-selfless 2015-07-07 09:33:32 -04:00
Rider Linden 0b9a641b17 Force Boost use of TR1 for result_of in tests 2015-07-06 15:05:27 -07:00
Rider Linden 8487a19df1 Force Boost result_of to use TR1 for tests. 2015-07-06 09:51:05 -07:00
Nat Goodspeed f90023fc0b MAINT-5357: Introduce and populate llcoro:: namespace.
To date, the coroutine helper functions in lleventcoro.h have been in the
global namespace. Migrate them into llcoro namespace, and fix references.
Specifically, LLVoidListener => llcoro::VoidListener, and voidlistener(),
postAndWait(), both waitForEventOn(), postAndWait2(), errorException() and
errorLog() have been moved into llcoro.
Also migrate new LLCoros::get_self() and Suspending to llcoro:: namespace.
While at it, I realized that -- having converted several lleventcoro.h
functions from templates (for arbitrary 'self' parameter type) to ordinary
functions, having moved them from lleventcoro.h to lleventcoro.cpp, we can now
migrate their helpers from lleventcoro.h to lleventcoro.cpp as well. This
eliminates the need for the LLEventDetail namespace; the relevant helpers are
now in an anonymous namespace in the .cpp file: listenerNameForCoro(),
storeToLLSDPath(), WaitForEventOnHelper and wfeoh().
2015-07-02 17:00:32 -04:00
Nat Goodspeed 7eaee4fde7 MAINT-5351: Reorganize lleventcoro_test.cpp to be more readable.
Each test<n>() method invokes a function from earlier in the source. It's much
better if each of those functions immediately precedes the test that invokes it.
2015-07-01 19:14:24 -04:00
Nat Goodspeed b262ded7e0 MAINT-5351: Remove 'self' parameter from coroutine functions.
lleventcoro_test.cpp runs clean (as modified for new API), and all the rest
builds clean, but the resulting viewer is as yet untested.
2015-07-01 18:33:29 -04:00
Nat Goodspeed 33649e848b Experimentally try full-size LLLeap stream test on Windows.
The new toolchain may (!) have fixed a longstanding bug in LLLeap / APR when
we try to pump large volumes of data through a Windows named pipe using APR
nonblocking I/O. This used to fail pretty consistently because the APR
nonblocking write call would sometimes spuriously return "would block" when in
fact the data buffer was completely written; the caller would later retry,
which of course would duplicate some of the data in the pipe. Preliminary
experiments with VS 2013 suggest this may have been resolved. This changeset
is to propagate the experiment to a wider range of Windows systems; we may
need to revert it if in fact the bug persists.
2015-01-12 12:11:37 -05:00
Oz Linden d91fe250ac fix dos line endings 2014-12-23 11:12:19 -05:00
callum_linden a54188cb3d Investigative check-in to see if system clock() function can be used to time ms_sleep() calls and adjust expectations accordingly 2014-12-22 14:19:19 -08:00
Nat Goodspeed 3b7d3cb1ea For one use case, boost::bind() better than boost::phoenix::bind().
We use boost::phoenix::placeholders::arg1 to imply a whole lambda expression,
replacing boost::lambda. But to bind a plain function in a more
straightforward way, seems classic boost::bind() works while
boost::phoenix::bind() does not.
2014-12-16 15:17:24 -05:00
Nat Goodspeed 1bd8a67dcb Isolate #pragma clang to __clang__ compilations.
It's very irritating that Visual Studio produces a warning for unrecognized
#pragmas, which we then merrily turn into an error -- #pragma is inherently
compiler-specific!
2014-12-16 13:54:29 -05:00
Nat Goodspeed eae38f7d57 Eliminate use of boost::lambda with boost::function (Trac #10864).
https://svn.boost.org/trac/boost/ticket/10864
I've used boost::lambda with boost::function in a number of creative ways over
the years. But the clang 6 shipped with Xcode 6 seems to have somehow broken
lambda + function in Boost 1.57. boost::phoenix is a partial workaround.
Sadly, lambda's comma-operator overload doesn't seem to be supported,
necessitating a couple ugly workarounds.
With real lambdas now supported by current compilers, I'm sure the Boost
community has little incentive to repair the lambda + function problem.
Presumably we'll be able to use such features ourselves Real Soon Now...
2014-12-12 13:46:41 -08:00
Nat Goodspeed a2bb483f2d Disambiguate a few ensure() calls.
These were of the form ensure(std::string, something convertible to bool). Not
sure what the ambiguity was, but ensure(std::string, bool(something)) works
better.
2014-12-11 13:12:20 -05:00
Oz Linden a74d0d44d1 remove skip from llframetimer_test now that it is fixed 2014-11-14 22:34:13 -05:00
Oz Linden 6b4916fc75 merge up to tip of viewer-tools-update 2014-11-14 22:32:54 -05:00
Oz Linden dbdbcbbd3c rewrite an llframetimer test to be less sensitive to extended ms_sleep calls 2014-11-14 17:22:26 -05:00
Nat Goodspeed 6991eb58c3 Skip LLFrameTimer test<3>, which fails with Xcode 6.x builds.
Hopefully this is temporary until we figure out the real problem!
2014-11-14 12:09:55 -05:00
Nat Goodspeed 918e2b629b Bring in new TUT library build. Clean up ensure_equals() overloads.
The new TUT library build eliminates the ambiguity about ensure_equals(const
char*, ...) versus ensure_equals(const std::string&, ...). Now it's all based
on const std::string&. Remove pointless const char* overloads and ambiguous
forwarding templates.
With clang in Xcode 6, any new datatypes we intend to use with ensure_equals()
must have operator<<(std::ostream&, datatype) declared BEFORE lltut.h
#includes tut.hpp. Reorder code in certain test source files to guarantee that
visibility.
2014-10-23 20:23:08 -07:00
Oz Linden 9e9779d3f8 Remove unit test case that relied on undefined order of evaluation
in: 'cout << a() << b()' the order of evaluation of a() and b() is undefined.
2014-10-22 21:20:10 -04:00
Oz Linden 25dcb53aa2 merge with more fixes from callum 2014-10-22 16:46:12 -04:00
Oz Linden 04291ba319 correct merge error in llerror_test.cpp 2014-10-22 16:42:18 -04:00
callum_linden 221c521f23 Update to build on Xcode 6.0 (fix unit tests): remove unused statement warning 2014-10-22 11:38:56 -07:00
callum_linden 0bcfb017ce Update to build on Xcode 6.0 (fix unit tests): skip llerror_test test for now - operator << issues on clang 2014-10-22 11:03:00 -07:00
callum_linden 428adcb35c Update to build on Xcode 6.0 (fix unit tests): remove unused functions that trigger clang warnings 2014-10-22 10:12:36 -07:00
Oz Linden 98d8313847 added skip to llerror_test of nested logging, noted in todo file 2014-10-22 12:00:03 -04:00
Stinson Linden 8392fde6f6 Pull and merge from ssh://hg@bitbucket.org/lindenlab/viewer-drtvwr-365. 2014-06-02 22:32:16 +01:00
Stinson Linden 08e83a341e MAINT-4009: Final pass refactoring to eliminate memory allocation related to error reporting that is not properly cleaned up. 2014-05-17 00:41:36 +01:00