diff options
author | Steven Moreland <smoreland@google.com> | 2024-01-03 21:44:32 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2024-01-03 21:44:32 +0000 |
commit | 566a2901e9cdeb81bd403679a33f5681da88bd3e (patch) | |
tree | 669d2fc224984abad42d92f89421cc24226bae1c | |
parent | a39da7cb448c3b0aef575eec91b1e71af9e7521c (diff) | |
parent | cc5dc08c150fe08a9b890f81e8eaf0ce8d7b4344 (diff) | |
download | libhardware_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.bp | 1 | ||||
-rw-r--r-- | uevent.c | 12 |
2 files changed, 13 insertions, 0 deletions
@@ -79,6 +79,7 @@ cc_library_shared { shared_libs: [ "android.system.suspend-V1-ndk", "libdl", + "liblog", ], header_libs: [ @@ -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 |