summaryrefslogtreecommitdiffstats
path: root/chromeos
diff options
context:
space:
mode:
authorhashimoto <hashimoto@chromium.org>2015-12-15 22:36:56 -0800
committerCommit bot <commit-bot@chromium.org>2015-12-16 06:38:14 +0000
commit961f5bfe72070c810df61a685f580af474710c2a (patch)
tree8356fe0b46d81417da91e5a7a3ff509202f91ed3 /chromeos
parenta4f02b7893792199e0c42e6dbcaf2820243fcb28 (diff)
downloadchromium_src-961f5bfe72070c810df61a685f580af474710c2a.zip
chromium_src-961f5bfe72070c810df61a685f580af474710c2a.tar.gz
chromium_src-961f5bfe72070c810df61a685f580af474710c2a.tar.bz2
Use HANDLE_EINTR in binder::Driver
Kernel's binder.h says when ioctl on binder driver returns EINTR, it should be handled by retrying. BUG=563282 Review URL: https://codereview.chromium.org/1529073002 Cr-Commit-Position: refs/heads/master@{#365488}
Diffstat (limited to 'chromeos')
-rw-r--r--chromeos/binder/driver.cc9
1 files changed, 5 insertions, 4 deletions
diff --git a/chromeos/binder/driver.cc b/chromeos/binder/driver.cc
index 2e33509..838eb58 100644
--- a/chromeos/binder/driver.cc
+++ b/chromeos/binder/driver.cc
@@ -39,7 +39,7 @@ bool Driver::Initialize() {
}
// Version check.
int version = 0;
- if (ioctl(fd_.get(), BINDER_VERSION, &version) != 0 ||
+ if (HANDLE_EINTR(ioctl(fd_.get(), BINDER_VERSION, &version)) != 0 ||
version != BINDER_CURRENT_PROTOCOL_VERSION) {
PLOG(ERROR) << "Version check failure: version = " << version;
return false;
@@ -66,7 +66,8 @@ int Driver::GetFD() {
bool Driver::SetMaxThreads(int max_threads) {
base::ThreadRestrictions::AssertIOAllowed();
- return ioctl(fd_.get(), BINDER_SET_MAX_THREADS, &max_threads) != -1;
+ return HANDLE_EINTR(ioctl(fd_.get(), BINDER_SET_MAX_THREADS, &max_threads)) !=
+ -1;
}
bool Driver::WriteRead(const char* write_buf,
@@ -81,7 +82,7 @@ bool Driver::WriteRead(const char* write_buf,
params.write_size = write_buf_size;
params.read_buffer = reinterpret_cast<uintptr_t>(read_buf);
params.read_size = read_buf_size;
- if (ioctl(fd_.get(), BINDER_WRITE_READ, &params) < 0) {
+ if (HANDLE_EINTR(ioctl(fd_.get(), BINDER_WRITE_READ, &params)) < 0) {
PLOG(ERROR) << "BINDER_WRITE_READ failed: write_buf_size = "
<< write_buf_size << ", read_buf_size = " << read_buf_size;
return false;
@@ -93,7 +94,7 @@ bool Driver::WriteRead(const char* write_buf,
bool Driver::NotifyCurrentThreadExiting() {
base::ThreadRestrictions::AssertIOAllowed();
- return ioctl(fd_.get(), BINDER_THREAD_EXIT, 0) != -1;
+ return HANDLE_EINTR(ioctl(fd_.get(), BINDER_THREAD_EXIT, 0)) != -1;
}
} // namespace binder