nova: re-throw uncatched exception of dying thread

If the re-throw works, we will can see which exception type was thrown.
This commit is contained in:
Christian Helmuth 2014-05-16 10:27:24 +02:00
parent 973d710101
commit 2c3a0bbe1b
1 changed files with 11 additions and 12 deletions

View File

@ -37,26 +37,25 @@ void Thread_base::_thread_start()
{
using namespace Genode;
/* if the inner catch handling fails, let thread die with some noise */
/* catch any exception at this point and try to print an error message */
try {
Thread_base::myself()->entry();
} catch (...) {
char thread_name[48];
Thread_base::myself()->name(thread_name, sizeof(thread_name));
/* catch any exception at this point and try to print a error message */
try {
Thread_base::myself()->entry();
} catch (...) {
char thread_name[48];
Thread_base::myself()->name(thread_name, sizeof(thread_name));
PERR("Thread '%s' died because of an uncaught exception", thread_name);
} catch (...) {
/* die in a noisy way */
nova_die();
}
Thread_base::myself()->_join_lock.unlock();
} catch (...) {
/* die in a noisy way */
nova_die();
throw;
}
Thread_base::myself()->_join_lock.unlock();
/* sleep silently */
Genode::sleep_forever();
}