summaryrefslogtreecommitdiffstats
path: root/firmware
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2006-01-23 10:53:47 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2006-01-23 10:53:47 +0000
commit765e0f89d804b00c504104f4842947bdeee69fa3 (patch)
treec551b287abc9605dc676863c877fa07358938d85 /firmware
parent6be916b379d27664fcbb529fa6034357393d0ccf (diff)
downloadrockbox-765e0f89d804b00c504104f4842947bdeee69fa3.tar.gz
rockbox-765e0f89d804b00c504104f4842947bdeee69fa3.zip
New kernel function, queue_delete(struct event_queue *q)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8424 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r--firmware/export/kernel.h1
-rw-r--r--firmware/kernel.c20
2 files changed, 21 insertions, 0 deletions
diff --git a/firmware/export/kernel.h b/firmware/export/kernel.h
index 42d160bcea..5cd3c6dc94 100644
--- a/firmware/export/kernel.h
+++ b/firmware/export/kernel.h
@@ -86,6 +86,7 @@ int tick_add_task(void (*f)(void));
int tick_remove_task(void (*f)(void));
extern void queue_init(struct event_queue *q);
+extern void queue_delete(struct event_queue *q);
extern void queue_wait(struct event_queue *q, struct event *ev);
extern void queue_wait_w_tmo(struct event_queue *q, struct event *ev, int ticks);
extern void queue_post(struct event_queue *q, long id, void *data);
diff --git a/firmware/kernel.c b/firmware/kernel.c
index b30a3bb12b..f8b9cec2e1 100644
--- a/firmware/kernel.c
+++ b/firmware/kernel.c
@@ -83,6 +83,26 @@ void queue_init(struct event_queue *q)
all_queues[num_queues++] = q;
}
+void queue_delete(struct event_queue *q)
+{
+ int i;
+
+ /* Find the queue to be deleted */
+ for(i = 0;i < num_queues;i++)
+ {
+ if(all_queues[i] == q)
+ break;
+ }
+
+ /* Move the following queues up in the list */
+ for(;i < num_queues-1;i++)
+ {
+ all_queues[i] = all_queues[i+1];
+ }
+
+ num_queues--;
+}
+
void queue_wait(struct event_queue *q, struct event *ev)
{
while(q->read == q->write)