From cc8bf82300b7a38e30d7a8d892a8a9ad55564957 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Tue, 10 Jun 2014 15:02:40 +0200 Subject: [PATCH] usb_drv: Add timeout support for events (ref #758) --- repos/dde_linux/src/lib/usb/signal/event.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/repos/dde_linux/src/lib/usb/signal/event.cc b/repos/dde_linux/src/lib/usb/signal/event.cc index 80a46a4d6..fb8a03f61 100644 --- a/repos/dde_linux/src/lib/usb/signal/event.cc +++ b/repos/dde_linux/src/lib/usb/signal/event.cc @@ -177,12 +177,16 @@ static void __wait_completion(struct completion *work) static unsigned long __wait_completion_timeout(struct completion *work, unsigned long timeout) { - unsigned long _j = jiffies + (timeout / HZ); + unsigned long _j = jiffies + timeout; while (!work->done) { + /* send signal */ + Event_context::e()->submit(); __wait_event(); - if (_j >= jiffies) + if (_j <= jiffies) { + dde_kit_log(1, "Timeout"); return 0; + } } work->done = 0; @@ -194,9 +198,8 @@ __wait_completion_timeout(struct completion *work, unsigned long timeout) unsigned long wait_for_completion_timeout(struct completion *work, unsigned long timeout) { - dde_kit_log(DEBUG_COMPLETION, "%p state: %u", work, work->done); - __wait_completion(work); - return 1; + dde_kit_log(DEBUG_COMPLETION, "%p state: %u timeout: %lu", work, work->done, timeout); + return __wait_completion_timeout(work, timeout); }