Chromium Code Reviews| Index: runtime/bin/file_linux.cc |
| diff --git a/runtime/bin/file_linux.cc b/runtime/bin/file_linux.cc |
| index 3114d01c0be8aba4161a2881c513190526393cc0..760d501ee7e72e7ecdc000830863331e4ad25239 100644 |
| --- a/runtime/bin/file_linux.cc |
| +++ b/runtime/bin/file_linux.cc |
| @@ -17,11 +17,14 @@ |
| #include "bin/builtin.h" |
| #include "bin/log.h" |
| +#include "bin/signal_blocker.h" |
| namespace dart { |
| namespace bin { |
| + |
| + |
|
siva
2013/12/13 21:29:14
???
|
| class FileHandle { |
| public: |
| explicit FileHandle(int fd) : fd_(fd) { } |
| @@ -64,12 +67,16 @@ bool File::IsClosed() { |
| int64_t File::Read(void* buffer, int64_t num_bytes) { |
| ASSERT(handle_->fd() >= 0); |
| + // Block profile interrupts while making I/O call. |
| + ThreadSignalBlocker tsb(SIGPROF); |
| return TEMP_FAILURE_RETRY(read(handle_->fd(), buffer, num_bytes)); |
| } |
| int64_t File::Write(const void* buffer, int64_t num_bytes) { |
| ASSERT(handle_->fd() >= 0); |
| + // Block profile interrupts while making I/O call. |
| + ThreadSignalBlocker tsb(SIGPROF); |
| return TEMP_FAILURE_RETRY(write(handle_->fd(), buffer, num_bytes)); |
| } |
| @@ -248,6 +255,8 @@ bool File::Copy(const char* old_path, const char* new_path) { |
| if (result < 0 && (errno == EINVAL || errno == ENOSYS)) { |
| const intptr_t kBufferSize = 8 * 1024; |
| uint8_t buffer[kBufferSize]; |
| + // Block profile interrupts while making I/O call. |
| + ThreadSignalBlocker tsb(SIGPROF); |
| while ((result = TEMP_FAILURE_RETRY( |
| read(old_fd, buffer, kBufferSize))) > 0) { |
| int wrote = TEMP_FAILURE_RETRY(write(new_fd, buffer, result)); |