From d76f6bff4f7561f6cf071108b8db5756fe9a3909 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Wed, 12 Mar 2008 16:38:58 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@227 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- src/chsem.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/chsem.c b/src/chsem.c index 6953fb846..14b8567ad 100644 --- a/src/chsem.c +++ b/src/chsem.c @@ -174,8 +174,13 @@ void chSemSignal(Semaphore *sp) { */ void chSemSignalI(Semaphore *sp) { - if (sp->s_cnt++ < 0) - chSchReadyI(fifo_remove(&sp->s_queue))->p_rdymsg = RDY_OK; + if (sp->s_cnt++ < 0) { + /* NOTE: It is done this way in order to allow a tail call on + chSchReadyI().*/ + Thread *tp = fifo_remove(&sp->s_queue); + tp->p_rdymsg = RDY_OK; + chSchReadyI(tp); + } } #ifdef CH_USE_SEMSW -- cgit v1.2.3