diff options
author | hashimoto <hashimoto@chromium.org> | 2015-12-15 22:36:56 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-16 06:38:14 +0000 |
commit | 961f5bfe72070c810df61a685f580af474710c2a (patch) | |
tree | 8356fe0b46d81417da91e5a7a3ff509202f91ed3 /chromeos | |
parent | a4f02b7893792199e0c42e6dbcaf2820243fcb28 (diff) | |
download | chromium_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.cc | 9 |
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, ¶ms) < 0) { + if (HANDLE_EINTR(ioctl(fd_.get(), BINDER_WRITE_READ, ¶ms)) < 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 |