From 642d7ee26f347152a106d48ddad37a8059d36fb1 Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Wed, 4 Aug 2010 16:22:40 +0200 Subject: Fix hanging event bug The no-wait approach, where events are read and process asynchronously, resulted in spurious events getting stuck in the input queue. This patch reverts the behavior to synchronous buffer read and processing, resolving the problem for now. Signed-off-by: Henrik Rydberg --- src/grail-api.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/grail-api.c b/src/grail-api.c index cbd2da4..c4a88df 100644 --- a/src/grail-api.c +++ b/src/grail-api.c @@ -46,9 +46,9 @@ static void *grail_thread(void *priv) pull = x->pull; finished = x->finished; x->pull = 0; - pthread_mutex_unlock(&x->mutex); if (!finished && pull) touch_dev_process(&x->dev); + pthread_mutex_unlock(&x->mutex); } pthread_exit(NULL); } @@ -161,10 +161,9 @@ int grail_idle(struct grail *ge, int fd, int ms) int grail_pull(struct grail *ge, int fd) { struct grail_impl *x = ge->impl; - int finished = touch_dev_fetch(&x->dev, fd) < 0; pthread_mutex_lock(&x->mutex); x->pull = 1; - x->finished = finished; + x->finished = touch_dev_fetch(&x->dev, fd) < 0; pthread_cond_signal(&x->wait); pthread_mutex_unlock(&x->mutex); return 1; -- cgit v1.2.3