diff --git a/base-foc/src/core/irq_session_component.cc b/base-foc/src/core/irq_session_component.cc index 82a55eab7..036a8b000 100644 --- a/base-foc/src/core/irq_session_component.cc +++ b/base-foc/src/core/irq_session_component.cc @@ -170,7 +170,7 @@ Irq_session_component::Irq_session_component(Cap_session *cap_session, PERR("Unavailable IRQ %lx requested", irq_number); throw Root::Invalid_args(); } - + long irq_trigger = Arg_string::find_arg(args, "irq_trigger").long_value(-1); irq_trigger = irq_trigger == -1 ? 0 : irq_trigger; @@ -216,10 +216,8 @@ void Irq_session_component::wait_for_irq() } -Irq_session_component::~Irq_session_component() -{ - PERR("Implement me, immediately!"); -} +Irq_session_component::~Irq_session_component() { + _proxy->remove_sharer(); } /*************************************** diff --git a/base/src/core/include/irq_proxy.h b/base/src/core/include/irq_proxy.h index f95ebc18d..ff4a9cd4a 100644 --- a/base/src/core/include/irq_proxy.h +++ b/base/src/core/include/irq_proxy.h @@ -196,6 +196,12 @@ class Genode::Irq_proxy : public THREAD, return true; } + virtual void remove_sharer() + { + Lock::Guard lock_guard(_mutex); + --_num_sharers; + } + template static PROXY *get_irq_proxy(long irq_number, Range_allocator *irq_alloc = 0) {