aboutsummaryrefslogtreecommitdiff
path: root/kernel/kernel.c
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2012-06-13 08:53:00 +0000
committerDimitri Sokolyuk <demon@dim13.org>2012-06-13 08:53:00 +0000
commitfcb6db9fcd6c6ddb0a30fe7a6f69dc79f5304927 (patch)
tree9f5151f53e0e8b5d3d8e97606bb25b7658b11b9e /kernel/kernel.c
parent621f4456a2dddec9cb7b6a5aec47ba1b65f398c7 (diff)
fix signal
Diffstat (limited to 'kernel/kernel.c')
-rw-r--r--kernel/kernel.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
index fb3521a..395aa5f 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -250,10 +250,9 @@ signal(uint8_t chan)
if ((tp = TAILQ_FIRST(&kern.wq[chan]))) {
/* release first waiting task from wait queue */
TAILQ_REMOVE(&kern.wq[chan], tp, w_link);
- kern.cur->prio = kern.cur->defprio;
- kern.cur->rq = &kern.rq[kern.cur->prio];
- TAILQ_INSERT_TAIL(kern.cur->rq, tp, r_link);
- swtch();
+ tp->prio = tp->defprio;
+ tp->rq = &kern.rq[tp->prio];
+ TAILQ_INSERT_TAIL(tp->rq, tp, r_link);
} else {
/* clear semaphore and continue */
kern.semaphore &= ~_BV(chan);