From 57de90e3b8958b4d5edf1bd0145f98623768caa9 Mon Sep 17 00:00:00 2001 From: waker Date: Wed, 30 Mar 2011 22:22:56 +0200 Subject: get rid of frameupdate event; mutex+cond based message pump without usleep --- messagepump.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'messagepump.c') diff --git a/messagepump.c b/messagepump.c index 368f0739..931b67db 100644 --- a/messagepump.c +++ b/messagepump.c @@ -34,6 +34,7 @@ static message_t *mfree; static message_t *mqueue; static message_t *mqtail; static uintptr_t mutex; +static uintptr_t cond; static void messagepump_reset (void); @@ -42,6 +43,7 @@ int messagepump_init (void) { messagepump_reset (); mutex = mutex_create (); + cond = cond_create (); return 0; } @@ -51,6 +53,7 @@ messagepump_free () { messagepump_reset (); mutex_unlock (mutex); mutex_free (mutex); + cond_free (cond); } static void @@ -88,9 +91,16 @@ messagepump_push (uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2) { msg->p1 = p1; msg->p2 = p2; mutex_unlock (mutex); + cond_signal (cond); return 0; } +void +messagepump_wait (void) { + cond_wait (cond, mutex); + mutex_unlock (mutex); +} + int messagepump_pop (uint32_t *id, uintptr_t *ctx, uint32_t *p1, uint32_t *p2) { if (!mqueue) { -- cgit v1.2.3