| Index: base/directory_watcher_inotify.cc
|
| diff --git a/base/directory_watcher_inotify.cc b/base/directory_watcher_inotify.cc
|
| index a17e1e4ace037d3618c736a43ca0fe0c8352d12e..8879fbe700baea7128ea912cec0d7a395a82d636 100644
|
| --- a/base/directory_watcher_inotify.cc
|
| +++ b/base/directory_watcher_inotify.cc
|
| @@ -16,6 +16,7 @@
|
| #include <utility>
|
| #include <vector>
|
|
|
| +#include "base/eintr_wrappers.h"
|
| #include "base/file_path.h"
|
| #include "base/hash_tables.h"
|
| #include "base/lock.h"
|
| @@ -100,11 +101,10 @@ class InotifyReaderTask : public Task {
|
| FD_SET(shutdown_fd_, &rfds);
|
|
|
| // Wait until some inotify events are available.
|
| - int select_result = select(std::max(inotify_fd_, shutdown_fd_) + 1,
|
| - &rfds, NULL, NULL, NULL);
|
| + int select_result =
|
| + HANDLE_EINTR(select(std::max(inotify_fd_, shutdown_fd_) + 1,
|
| + &rfds, NULL, NULL, NULL));
|
| if (select_result < 0) {
|
| - if (errno == EINTR)
|
| - continue;
|
| DLOG(WARNING) << "select failed: " << strerror(errno);
|
| return;
|
| }
|
| @@ -114,7 +114,8 @@ class InotifyReaderTask : public Task {
|
|
|
| // Adjust buffer size to current event queue size.
|
| int buffer_size;
|
| - int ioctl_result = ioctl(inotify_fd_, FIONREAD, &buffer_size);
|
| + int ioctl_result = HANDLE_EINTR(ioctl(inotify_fd_, FIONREAD,
|
| + &buffer_size));
|
|
|
| if (ioctl_result != 0) {
|
| DLOG(WARNING) << "ioctl failed: " << strerror(errno);
|
| @@ -123,10 +124,8 @@ class InotifyReaderTask : public Task {
|
|
|
| std::vector<char> buffer(buffer_size);
|
|
|
| - ssize_t bytes_read;
|
| - do {
|
| - bytes_read = read(inotify_fd_, &buffer[0], buffer_size);
|
| - } while (bytes_read < 0 && errno == EINTR);
|
| + ssize_t bytes_read = HANDLE_EINTR(read(inotify_fd_, &buffer[0],
|
| + buffer_size));
|
|
|
| if (bytes_read < 0) {
|
| DLOG(WARNING) << "read from inotify fd failed: " << strerror(errno);
|
| @@ -188,12 +187,7 @@ InotifyReader::~InotifyReader() {
|
| if (valid_) {
|
| // Write to the self-pipe so that the select call in InotifyReaderTask
|
| // returns.
|
| - ssize_t bytes_written;
|
| - do {
|
| - bytes_written = write(shutdown_pipe_[1], "", 1);
|
| - if (bytes_written == 0)
|
| - continue;
|
| - } while (bytes_written == -1 && errno == EINTR);
|
| + ssize_t bytes_written = HANDLE_EINTR(write(shutdown_pipe_[1], "", 1));
|
| thread_.Stop();
|
| }
|
| if (inotify_fd_ >= 0)
|
|
|