| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/globals.h" | 5 #include "platform/globals.h" |
| 6 #if defined(TARGET_OS_ANDROID) | 6 #if defined(TARGET_OS_ANDROID) |
| 7 | 7 |
| 8 #include "bin/eventhandler.h" | 8 #include "bin/eventhandler.h" |
| 9 | 9 |
| 10 #include <errno.h> // NOLINT | 10 #include <errno.h> // NOLINT |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 sd->fd(), | 81 sd->fd(), |
| 82 &event)); | 82 &event)); |
| 83 } else { | 83 } else { |
| 84 status = TEMP_FAILURE_RETRY(epoll_ctl(epoll_fd_, | 84 status = TEMP_FAILURE_RETRY(epoll_ctl(epoll_fd_, |
| 85 EPOLL_CTL_ADD, | 85 EPOLL_CTL_ADD, |
| 86 sd->fd(), | 86 sd->fd(), |
| 87 &event)); | 87 &event)); |
| 88 sd->set_tracked_by_epoll(true); | 88 sd->set_tracked_by_epoll(true); |
| 89 } | 89 } |
| 90 if (status == -1) { | 90 if (status == -1) { |
| 91 FATAL1("Failed updating epoll instance: %s", strerror(errno)); | 91 const int kBufferSize = 1024; |
| 92 char error_message[kBufferSize]; |
| 93 strerror_r(errno, error_message, kBufferSize); |
| 94 FATAL1("Failed updating epoll instance: %s", error_message); |
| 92 } | 95 } |
| 93 } | 96 } |
| 94 } | 97 } |
| 95 | 98 |
| 96 | 99 |
| 97 EventHandlerImplementation::EventHandlerImplementation() | 100 EventHandlerImplementation::EventHandlerImplementation() |
| 98 : socket_map_(&HashMap::SamePointerValue, 16) { | 101 : socket_map_(&HashMap::SamePointerValue, 16) { |
| 99 intptr_t result; | 102 intptr_t result; |
| 100 result = TEMP_FAILURE_RETRY(pipe(interrupt_fds_)); | 103 result = TEMP_FAILURE_RETRY(pipe(interrupt_fds_)); |
| 101 if (result != 0) { | 104 if (result != 0) { |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 // recv to peek for whether the other end of the socket | 302 // recv to peek for whether the other end of the socket |
| 300 // actually closed. | 303 // actually closed. |
| 301 char buffer; | 304 char buffer; |
| 302 ssize_t bytesPeeked = | 305 ssize_t bytesPeeked = |
| 303 TEMP_FAILURE_RETRY(recv(sd->fd(), &buffer, 1, MSG_PEEK)); | 306 TEMP_FAILURE_RETRY(recv(sd->fd(), &buffer, 1, MSG_PEEK)); |
| 304 ASSERT(EAGAIN == EWOULDBLOCK); | 307 ASSERT(EAGAIN == EWOULDBLOCK); |
| 305 if (bytesPeeked == 0) { | 308 if (bytesPeeked == 0) { |
| 306 event_mask = (1 << kCloseEvent); | 309 event_mask = (1 << kCloseEvent); |
| 307 sd->MarkClosedRead(); | 310 sd->MarkClosedRead(); |
| 308 } else if (errno != EWOULDBLOCK) { | 311 } else if (errno != EWOULDBLOCK) { |
| 309 Log::PrintErr("Error recv: %s\n", strerror(errno)); | 312 const int kBufferSize = 1024; |
| 313 char error_message[kBufferSize]; |
| 314 strerror_r(errno, error_message, kBufferSize); |
| 315 Log::PrintErr("Error recv: %s\n", error_message); |
| 310 } | 316 } |
| 311 } | 317 } |
| 312 } | 318 } |
| 313 } | 319 } |
| 314 | 320 |
| 315 // On pipes EPOLLHUP is reported without EPOLLIN when there is no | 321 // On pipes EPOLLHUP is reported without EPOLLIN when there is no |
| 316 // more data to read. | 322 // more data to read. |
| 317 if (sd->IsPipe()) { | 323 if (sd->IsPipe()) { |
| 318 if (((events & EPOLLIN) == 0) && | 324 if (((events & EPOLLIN) == 0) && |
| 319 ((events & EPOLLHUP) != 0)) { | 325 ((events & EPOLLHUP) != 0)) { |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 435 | 441 |
| 436 uint32_t EventHandlerImplementation::GetHashmapHashFromFd(intptr_t fd) { | 442 uint32_t EventHandlerImplementation::GetHashmapHashFromFd(intptr_t fd) { |
| 437 // The hashmap does not support keys with value 0. | 443 // The hashmap does not support keys with value 0. |
| 438 return dart::Utils::WordHash(fd + 1); | 444 return dart::Utils::WordHash(fd + 1); |
| 439 } | 445 } |
| 440 | 446 |
| 441 } // namespace bin | 447 } // namespace bin |
| 442 } // namespace dart | 448 } // namespace dart |
| 443 | 449 |
| 444 #endif // defined(TARGET_OS_ANDROID) | 450 #endif // defined(TARGET_OS_ANDROID) |
| OLD | NEW |