hw: enable destruction of IRQ sessions

Implement the missing Irq_session_component destructor.

Fix #1460
This commit is contained in:
Martin Stein 2015-03-18 19:05:31 +01:00 committed by Christian Helmuth
parent 98616a1812
commit ff6595f150
2 changed files with 9 additions and 4 deletions

View File

@ -31,6 +31,7 @@ namespace Genode
{
private:
unsigned _irq_number;
Range_allocator * const _irq_alloc;
Irq_session_capability _cap;
Irq_signal _signal;

View File

@ -39,8 +39,11 @@ void Irq_session_component::wait_for_irq() { PERR("not implemented"); }
Irq_signal Irq_session_component::signal() { return _signal; }
Irq_session_component::~Irq_session_component() { PERR("not implemented"); }
Irq_session_component::~Irq_session_component()
{
irq_session_ep()->dissolve(this);
_irq_alloc->free((void *)_irq_number);
}
Irq_session_component::Irq_session_component(Cap_session * const cap_session,
Range_allocator * const irq_alloc,
@ -63,6 +66,7 @@ Irq_session_component::Irq_session_component(Cap_session * const cap_session
throw Root::Invalid_args();
}
/* make interrupt accessible */
_signal = Kernel::User_irq::signal(irq_number);
_cap = Irq_session_capability(irq_session_ep()->manage(this));
_irq_number = (unsigned)irq_number;
_signal = Kernel::User_irq::signal(irq_number);
_cap = Irq_session_capability(irq_session_ep()->manage(this));
}