diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2017-04-01 11:33:11 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2017-04-01 11:33:11 +0200 |
commit | c4adc6d6aa772cb9b8e5dc294bbdc75b4e22f38d (patch) | |
tree | 9afe3b10ec514dc5b1b284b4b39bd61f22d4f7f9 /build2/test/script/builtin.cxx | |
parent | 01570ff5ee4568c63d8466cfb972cc31a2451a18 (diff) |
Redo handling of unhandled exceptions in async execution
Here is the problem: noexcept looses the call stack. That is, unlike an
unhandled exception, if noexcept is tripped, then you won't see the place
where it was thrown.
In this new implementation we now have noexcept only on the task thunk. And
the task is called via a thunk only in case of async execution. This means
that if we are executing serially (-j 1), then this will be an unhandled
exception, not noexcept. Hopefully will be a bit easier to debug.
Diffstat (limited to 'build2/test/script/builtin.cxx')
-rw-r--r-- | build2/test/script/builtin.cxx | 12 |
1 files changed, 1 insertions, 11 deletions
diff --git a/build2/test/script/builtin.cxx b/build2/test/script/builtin.cxx index 9bd6a1b..a2f3107 100644 --- a/build2/test/script/builtin.cxx +++ b/build2/test/script/builtin.cxx @@ -1355,17 +1355,7 @@ namespace build2 auto_fd in, auto_fd out, auto_fd err, uint8_t& r) noexcept { - try - { - r = fn (sp, args, move (in), move (out), move (err)); - } - catch (const std::exception& e) - { - diag_lock l; - *diag_stream << "unhandled exception: " << e << endl; - assert (false); - abort (); - } + r = fn (sp, args, move (in), move (out), move (err)); } // Run builtin implementation asynchronously. |