From 1d4e86c44589b3a97ca0113493c2e569c3aabcc6 Mon Sep 17 00:00:00 2001 From: Amir Goldstein Date: Sun, 10 Nov 2013 15:36:58 +0200 Subject: [PATCH] ueventd: fix a busy loop while reading uevents Under certain conditions, poll() may raise the POLLERR flag along with POLLIN, in which case the check for (ufd.revents == POLLIN) results in an endless busy loop. The following fix was applied to hardware/libhardware_legacy/uevent/uevent.c to fix a similar bug: commit 3aabb260ceef10377c31c9e45fb239247f5cfeba Author: Mathias Agopian Date: Mon Oct 1 14:53:18 2012 -0700 fix a typo in uevent_next_eventi Bug: 7114973 Change-Id: I15a4c714b59aeb1d02db00517d70b5f0e5ab22c2 Applying the same fix for two more poll loops in init and ueventd. Change-Id: I50693f6d3c904992ac4b8a9a14a83c7106e6b9e0 --- init/init.c | 2 +- init/ueventd.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/init/init.c b/init/init.c index 525b69faf..c497d78a0 100644 --- a/init/init.c +++ b/init/init.c @@ -1044,7 +1044,7 @@ int main(int argc, char **argv) continue; for (i = 0; i < fd_count; i++) { - if (ufds[i].revents == POLLIN) { + if (ufds[i].revents & POLLIN) { if (ufds[i].fd == get_property_set_fd()) handle_property_set_fd(); else if (ufds[i].fd == get_keychord_fd()) diff --git a/init/ueventd.c b/init/ueventd.c index a41c31e23..3d01836c5 100644 --- a/init/ueventd.c +++ b/init/ueventd.c @@ -94,7 +94,7 @@ int ueventd_main(int argc, char **argv) nr = poll(&ufd, 1, -1); if (nr <= 0) continue; - if (ufd.revents == POLLIN) + if (ufd.revents & POLLIN) handle_device_fd(); } }