summaryrefslogtreecommitdiff
path: root/messagepump.c
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2011-03-30 22:22:56 +0200
committerGravatar waker <wakeroid@gmail.com>2011-03-30 22:22:56 +0200
commit57de90e3b8958b4d5edf1bd0145f98623768caa9 (patch)
tree03fd9d1875d92b51aa8dfad88ead4f4583c5194d /messagepump.c
parentd995a2ec11a36793a4f143b2343a71343ddb2bb6 (diff)
get rid of frameupdate event; mutex+cond based message pump without usleep
Diffstat (limited to 'messagepump.c')
-rw-r--r--messagepump.c10
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) {