From 3915b660fda1c670bf1d5a5def4f68cd1cfb3967 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 24 Jun 2011 16:51:31 +0100 Subject: [PATCH] [hw] Eliminate polling while waiting for window to open Polling for the data-transfer window to become open is wasteful. We can eliminate the polling loop by using hw_step() as the handler for an xfer_window_changed() event. If the window is already open at the time of instantiation, then xfer_window_changed() may never be called. We can cover this case by using hw_step() as the step() method of a one-shot process. Since the signature for an xfer_window_changed() method is identical to the signature for a process step() method, the same function can be used for both. Signed-off-by: Michael Brown --- src/core/hw.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/hw.c b/src/core/hw.c index e9c9ffc1d..91736a652 100644 --- a/src/core/hw.c +++ b/src/core/hw.c @@ -36,6 +36,7 @@ static void hw_step ( struct hw *hw ) { } static struct interface_operation hw_xfer_operations[] = { + INTF_OP ( xfer_window_changed, struct hw *, hw_step ), INTF_OP ( intf_close, struct hw *, hw_finished ), }; @@ -43,7 +44,7 @@ static struct interface_descriptor hw_xfer_desc = INTF_DESC ( struct hw, xfer, hw_xfer_operations ); static struct process_descriptor hw_process_desc = - PROC_DESC ( struct hw, process, hw_step ); + PROC_DESC_ONCE ( struct hw, process, hw_step ); static int hw_open ( struct interface *xfer, struct uri *uri __unused ) { struct hw *hw;