From 8ac3209aa8eb57b7fb5d150bb48ef2d97c3e4f3d Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 24 Oct 2012 14:44:25 +0200 Subject: [PATCH] DDE_KIT: Startup synchronization for IRQ thread Wait until 'entry' function of IRQ threads is called. --- os/src/lib/dde_kit/interrupt.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/os/src/lib/dde_kit/interrupt.cc b/os/src/lib/dde_kit/interrupt.cc index b36f2e444..18fa5aae7 100644 --- a/os/src/lib/dde_kit/interrupt.cc +++ b/os/src/lib/dde_kit/interrupt.cc @@ -68,8 +68,13 @@ class Irq_handler : Dde_kit::Thread, public Avl_node : Dde_kit::Thread(_compose_thread_name(irq)), _irq_number(irq), _irq(irq), _handler(handler), _init(init), _priv(priv), - _shared(shared), _handle_irq(1) - { start(); } + _shared(shared), _handle_irq(1), _lock(Lock::LOCKED) + { + start(); + + /* wait until thread is started */ + Lock::Guard guard(_lock); + } /** Enable IRQ handling */ void enable() @@ -93,6 +98,9 @@ class Irq_handler : Dde_kit::Thread, public Avl_node /* call user init function before doing anything else here */ if (_init) _init(_priv); + /* unblock creating thread */ + _lock.unlock(); + while (1) { _irq.wait_for_irq();