diff options
Diffstat (limited to 'uisimulator/sdl')
-rw-r--r-- | uisimulator/sdl/kernel.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/uisimulator/sdl/kernel.c b/uisimulator/sdl/kernel.c index bfe6062450..f1eb095e7b 100644 --- a/uisimulator/sdl/kernel.c +++ b/uisimulator/sdl/kernel.c | |||
@@ -38,6 +38,7 @@ void queue_init(struct event_queue *q, bool register_queue) | |||
38 | 38 | ||
39 | q->read = 0; | 39 | q->read = 0; |
40 | q->write = 0; | 40 | q->write = 0; |
41 | q->thread = NULL; | ||
41 | } | 42 | } |
42 | 43 | ||
43 | void queue_delete(struct event_queue *q) | 44 | void queue_delete(struct event_queue *q) |
@@ -99,6 +100,19 @@ void queue_clear(struct event_queue* q) | |||
99 | q->write = 0; | 100 | q->write = 0; |
100 | } | 101 | } |
101 | 102 | ||
103 | void queue_remove_from_head(struct event_queue *q, long id) | ||
104 | { | ||
105 | int oldlevel = set_irq_level(15<<4); | ||
106 | |||
107 | while (q->read != q->write && | ||
108 | q->events[(q->read) & QUEUE_LENGTH_MASK].id == id) | ||
109 | { | ||
110 | q->read++; | ||
111 | } | ||
112 | |||
113 | set_irq_level(oldlevel); | ||
114 | } | ||
115 | |||
102 | void switch_thread(bool save_context, struct thread_entry **blocked_list) | 116 | void switch_thread(bool save_context, struct thread_entry **blocked_list) |
103 | { | 117 | { |
104 | (void)save_context; | 118 | (void)save_context; |