From 096d72de907849407f2f53f171897fba40784a58 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Fri, 13 Mar 2015 11:20:44 +0100 Subject: [PATCH] base: check result of bind_thread Related to #1418 Issue #111 --- repos/base/src/base/thread/thread_start.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/repos/base/src/base/thread/thread_start.cc b/repos/base/src/base/thread/thread_start.cc index d1ea02d3f..debe74574 100644 --- a/repos/base/src/base/thread/thread_start.cc +++ b/repos/base/src/base/thread/thread_start.cc @@ -55,12 +55,18 @@ void Thread_base::start() char buf[48]; name(buf, sizeof(buf)); _thread_cap = _cpu_session->create_thread(0, buf, (addr_t)&_context->utcb); + if (!_thread_cap.valid()) + throw Cpu_session::Thread_creation_failed(); /* assign thread to protection domain */ - env()->pd_session()->bind_thread(_thread_cap); + if (env()->pd_session()->bind_thread(_thread_cap)) + throw Cpu_session::Thread_creation_failed(); /* create new pager object and assign it to the new thread */ Pager_capability pager_cap = env()->rm_session()->add_client(_thread_cap); + if (!pager_cap.valid()) + throw Cpu_session::Thread_creation_failed(); + _cpu_session->set_pager(_thread_cap, pager_cap); /* register initial IP and SP at core */