diff --git a/repos/base-hw/src/core/kernel/signal_receiver.cc b/repos/base-hw/src/core/kernel/signal_receiver.cc index 8a25a6cd3..8ff35588f 100644 --- a/repos/base-hw/src/core/kernel/signal_receiver.cc +++ b/repos/base-hw/src/core/kernel/signal_receiver.cc @@ -33,7 +33,10 @@ Signal_ack_handler::~Signal_ack_handler() void Signal_handler::_cancel_waiting() { - if (_receiver) { _receiver->_handler_cancelled(this); } + if (_receiver) { + _receiver->_handler_cancelled(this); + _receiver = 0; + } } diff --git a/repos/base-hw/src/core/kernel/thread.cc b/repos/base-hw/src/core/kernel/thread.cc index 12c2eee7a..7bebe62ae 100644 --- a/repos/base-hw/src/core/kernel/thread.cc +++ b/repos/base-hw/src/core/kernel/thread.cc @@ -114,6 +114,8 @@ bool Thread::_resume() return true; case AWAITS_SIGNAL: Signal_handler::cancel_waiting(); + user_arg_0(-1); + _become_active(); return true; case AWAITS_SIGNAL_CONTEXT_KILL: Signal_context_killer::cancel_waiting();