From 3c1d7b34c151ec1669e0d190a0839718242682c9 Mon Sep 17 00:00:00 2001 From: Bo Huang Date: Tue, 21 Jan 2014 14:25:22 +0800 Subject: [PATCH] libusbhost: Fix issue of multiple inotify event at same time. libusbhost can handle multiple inotify events at same time on Kit kat. In original implementation, the function-level ret is assigned with length of read and used for while loop. if want to add a new watch for subdirectory,inotify_add_watch will update the function-level ret with watch descriptor. It impact on while loop to do exit. Add local result to avoid it. Change-Id: I101041ccfd54eaac14969a45e90ab2e49bdff578 Signed-off-by: Bo Huang --- libusbhost/usbhost.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libusbhost/usbhost.c b/libusbhost/usbhost.c index 8be393ee7..cd8000a39 100644 --- a/libusbhost/usbhost.c +++ b/libusbhost/usbhost.c @@ -263,11 +263,12 @@ int usb_host_read_event(struct usb_host_context *context) D("%s subdirectory %s: index: %d\n", (event->mask & IN_CREATE) ? "new" : "gone", path, i); if (i > 0 && i < MAX_USBFS_WD_COUNT) { + int local_ret = 0; if (event->mask & IN_CREATE) { - ret = inotify_add_watch(context->fd, path, + local_ret = inotify_add_watch(context->fd, path, IN_CREATE | IN_DELETE); - if (ret >= 0) - context->wds[i] = ret; + if (local_ret >= 0) + context->wds[i] = local_ret; done = find_existing_devices_bus(path, context->cb_added, context->data); } else if (event->mask & IN_DELETE) {