uevent.c: avoid POLLERR infinite loop
I have not reproduced this infinite loop. An infinite loop may be more useful to debug. Note, libhardware_legacy AIDL interface dependency already includes liblog, so this won't change which libraries are loaded. Bug: 300009377 Test: N/A Change-Id: I1f5545456e7074823f0f9df35496cbf5a2a012a4
This commit is contained in:
parent
c315f49b2e
commit
e44aa092c5
2 changed files with 13 additions and 0 deletions
|
@ -79,6 +79,7 @@ cc_library_shared {
|
|||
shared_libs: [
|
||||
"android.system.suspend-V1-ndk",
|
||||
"libdl",
|
||||
"liblog",
|
||||
],
|
||||
|
||||
header_libs: [
|
||||
|
|
12
uevent.c
12
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
|
||||
|
|
Loading…
Reference in a new issue