From 4ec3c43c8a9f16f90ab5830c4aa1e238a0c248cf Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Thu, 20 May 2021 00:32:47 +0000 Subject: libbinder: FdTrigger encapsulate poll So we can use this in other places. Bug: 185167543 Test: binderRpcTest Change-Id: Ie8012b1c8dcea035bc8d0f14af2bd2ddbb197d89 --- libs/binder/RpcSession.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'libs/binder/RpcSession.cpp') diff --git a/libs/binder/RpcSession.cpp b/libs/binder/RpcSession.cpp index 4efa6bb1a9..ea82f36400 100644 --- a/libs/binder/RpcSession.cpp +++ b/libs/binder/RpcSession.cpp @@ -19,10 +19,12 @@ #include #include +#include #include #include +#include #include #include #include @@ -123,6 +125,25 @@ void RpcSession::FdTrigger::trigger() { mWrite.reset(); } +bool RpcSession::FdTrigger::triggerablePollRead(base::borrowed_fd fd) { + while (true) { + pollfd pfd[]{{.fd = fd.get(), .events = POLLIN, .revents = 0}, + {.fd = mRead.get(), .events = POLLHUP, .revents = 0}}; + int ret = TEMP_FAILURE_RETRY(poll(pfd, arraysize(pfd), -1)); + if (ret < 0) { + ALOGE("Could not poll: %s", strerror(errno)); + continue; + } + if (ret == 0) { + continue; + } + if (pfd[1].revents & POLLHUP) { + return false; + } + return true; + } +} + status_t RpcSession::readId() { { std::lock_guard _l(mMutex); -- cgit v1.2.3-59-g8ed1b