diff options
author | waker <wakeroid@gmail.com> | 2011-03-30 22:22:56 +0200 |
---|---|---|
committer | waker <wakeroid@gmail.com> | 2011-03-30 22:22:56 +0200 |
commit | 57de90e3b8958b4d5edf1bd0145f98623768caa9 (patch) | |
tree | 03fd9d1875d92b51aa8dfad88ead4f4583c5194d /messagepump.c | |
parent | d995a2ec11a36793a4f143b2343a71343ddb2bb6 (diff) |
get rid of frameupdate event; mutex+cond based message pump without usleep
Diffstat (limited to 'messagepump.c')
-rw-r--r-- | messagepump.c | 10 |
1 files changed, 10 insertions, 0 deletions
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) { |