summaryrefslogtreecommitdiff
path: root/firmware/kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/kernel.c')
-rw-r--r--firmware/kernel.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/firmware/kernel.c b/firmware/kernel.c
index 77b0c6ffef..03be6db624 100644
--- a/firmware/kernel.c
+++ b/firmware/kernel.c
@@ -38,8 +38,6 @@ void (*tick_funcs[MAX_NUM_TICK_TASKS])(void);
38static struct event_queue *all_queues[32] NOCACHEBSS_ATTR; 38static struct event_queue *all_queues[32] NOCACHEBSS_ATTR;
39static int num_queues NOCACHEBSS_ATTR; 39static int num_queues NOCACHEBSS_ATTR;
40 40
41void queue_wait(struct event_queue *q, struct event *ev) ICODE_ATTR;
42
43/**************************************************************************** 41/****************************************************************************
44 * Standard kernel stuff 42 * Standard kernel stuff
45 ****************************************************************************/ 43 ****************************************************************************/
@@ -234,7 +232,15 @@ void queue_wait(struct event_queue *q, struct event *ev)
234 int oldlevel; 232 int oldlevel;
235 unsigned int rd; 233 unsigned int rd;
236 234
237 oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); 235 oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL);
236
237#ifdef HAVE_EXTENDED_MESSAGING_AND_NAME
238 if(q->send && q->send->curr_sender)
239 {
240 /* auto-reply */
241 queue_release_sender(&q->send->curr_sender, 0);
242 }
243#endif
238 244
239 if (q->read == q->write) 245 if (q->read == q->write)
240 { 246 {
@@ -259,6 +265,14 @@ void queue_wait(struct event_queue *q, struct event *ev)
259void queue_wait_w_tmo(struct event_queue *q, struct event *ev, int ticks) 265void queue_wait_w_tmo(struct event_queue *q, struct event *ev, int ticks)
260{ 266{
261 int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); 267 int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL);
268
269#ifdef HAVE_EXTENDED_MESSAGING_AND_NAME
270 if (q->send && q->send->curr_sender)
271 {
272 /* auto-reply */
273 queue_release_sender(&q->send->curr_sender, 0);
274 }
275#endif
262 276
263 if (q->read == q->write && ticks > 0) 277 if (q->read == q->write && ticks > 0)
264 { 278 {