From 0b7bb31453762f354af30210d1981f5dec3cdc19 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Sat, 14 Apr 2007 09:47:47 +0000 Subject: Simplification, queue pointers don't wrap (except at INT_MAX, but the calculation is still correct in this case). Implemented queue_count() for the simulator. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13154 a1c6a512-1295-4272-9138-f99709370657 --- apps/gui/list.c | 4 ---- firmware/kernel.c | 13 +++++-------- uisimulator/sdl/kernel.c | 5 +++++ 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/apps/gui/list.c b/apps/gui/list.c index bd63021369..e3b0d6afe5 100644 --- a/apps/gui/list.c +++ b/apps/gui/list.c @@ -943,9 +943,7 @@ unsigned gui_synclist_do_button(struct gui_synclist * lists, case ACTION_STD_PREV: case ACTION_STD_PREVREPEAT: gui_synclist_select_previous(lists); -#ifndef SIMULATOR if (queue_count(&button_queue) < FRAMEDROP_TRIGGER) -#endif gui_synclist_draw(lists); yield(); return ACTION_STD_PREV; @@ -953,9 +951,7 @@ unsigned gui_synclist_do_button(struct gui_synclist * lists, case ACTION_STD_NEXT: case ACTION_STD_NEXTREPEAT: gui_synclist_select_next(lists); -#ifndef SIMULATOR if (queue_count(&button_queue) < FRAMEDROP_TRIGGER) -#endif gui_synclist_draw(lists); yield(); return ACTION_STD_NEXT; diff --git a/firmware/kernel.c b/firmware/kernel.c index 310832c8af..b073915c04 100644 --- a/firmware/kernel.c +++ b/firmware/kernel.c @@ -345,7 +345,7 @@ intptr_t queue_send(struct event_queue *q, long id, intptr_t data) { int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); unsigned int wr; - + lock_cores(); wr = q->write++ & QUEUE_LENGTH_MASK; @@ -495,23 +495,20 @@ void queue_remove_from_head(struct event_queue *q, long id) int queue_count(const struct event_queue *q) { int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); - int result = 0; + int result; #if NUM_CORES > 1 if (!q->irq_safe) lock_cores(); #endif - if (q->read <= q->write) - result = q->write - q->read; - else - result = QUEUE_LENGTH - (q->read - q->write); - + result = q->write - q->read; + #if NUM_CORES > 1 if (!q->irq_safe) unlock_cores(); #endif - + set_irq_level(oldlevel); return result; diff --git a/uisimulator/sdl/kernel.c b/uisimulator/sdl/kernel.c index 8918ff7e12..98d509f6a6 100644 --- a/uisimulator/sdl/kernel.c +++ b/uisimulator/sdl/kernel.c @@ -281,6 +281,11 @@ void queue_remove_from_head(struct event_queue *q, long id) set_irq_level(oldlevel); } +int queue_count(const struct event_queue *q) +{ + return q->write - q->read; +} + void switch_thread(bool save_context, struct thread_entry **blocked_list) { (void)save_context; -- cgit v1.2.3