summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Moreland <smoreland@google.com>2024-01-03 21:44:32 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2024-01-03 21:44:32 +0000
commit566a2901e9cdeb81bd403679a33f5681da88bd3e (patch)
tree669d2fc224984abad42d92f89421cc24226bae1c
parenta39da7cb448c3b0aef575eec91b1e71af9e7521c (diff)
parentcc5dc08c150fe08a9b890f81e8eaf0ce8d7b4344 (diff)
downloadlibhardware_legacy-566a2901e9cdeb81bd403679a33f5681da88bd3e.tar.gz
Merge "uevent.c: avoid POLLERR infinite loop" into main am: cc5dc08c15
Original change: https://android-review.googlesource.com/c/platform/hardware/libhardware_legacy/+/2878224 Change-Id: I3262b82c9849723ce3930a2690a31157927e5c43 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--Android.bp1
-rw-r--r--uevent.c12
2 files changed, 13 insertions, 0 deletions
diff --git a/Android.bp b/Android.bp
index 409db5d..871b1f9 100644
--- a/Android.bp
+++ b/Android.bp
@@ -79,6 +79,7 @@ cc_library_shared {
shared_libs: [
"android.system.suspend-V1-ndk",
"libdl",
+ "liblog",
],
header_libs: [
diff --git a/uevent.c b/uevent.c
index e40aa2e..0dcae79 100644
--- a/uevent.c
+++ b/uevent.c
@@ -16,6 +16,8 @@
#include <hardware_legacy/uevent.h>
+#include <log/log.h>
+
#include <malloc.h>
#include <string.h>
#include <unistd.h>
@@ -94,6 +96,16 @@ int uevent_next_event(char* buffer, int buffer_length)
return count;
}
}
+
+ if (nr > 0 && (fds.revents & POLLERR)) {
+ int error = 0;
+ socklen_t errlen = sizeof(error);
+ getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &errlen);
+
+ // see b/300009377, this used to be an infinite loop
+ // abort to try to recover
+ LOG_ALWAYS_FATAL("Uevent POLLERR: %s, on FD %d", strerror(error), fd);
+ }
}
// won't get here