Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18a574f7 authored by Jeff Brown's avatar Jeff Brown
Browse files

Work around spurious epoll notifications.

Sometimes it seems like we can get into a situation where we are
unable to remove an fd from the epoll set but it keeps sending us
events anyhow.  Defensively rebuild the epoll set in this case
to prevent us from spinning forever.

Bug: 21271428
Change-Id: I5607e565f2e12460d7113a1f62a70d38d334e271
parent 7eb3abdb
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -567,7 +567,12 @@ int Looper::removeFd(int fd, int seq) {
#endif
                scheduleEpollRebuildLocked();
            } else {
                // Some other error occurred.  This is really weird because it means
                // our list of callbacks got out of sync with the epoll set somehow.
                // We defensively rebuild the epoll set to avoid getting spurious
                // notifications with nowhere to go.
                ALOGE("Error removing epoll events for fd %d, errno=%d", fd, errno);
                scheduleEpollRebuildLocked();
                return -1;
            }
        }