Chromium Code Reviews| Index: runtime/bin/eventhandler_android.cc |
| diff --git a/runtime/bin/eventhandler_android.cc b/runtime/bin/eventhandler_android.cc |
| index 8040e1ef4e2d24d391619eb98ff6c8071eeb3499..65e7de18debf74437c328b5f020a4056fc884b6d 100644 |
| --- a/runtime/bin/eventhandler_android.cc |
| +++ b/runtime/bin/eventhandler_android.cc |
| @@ -179,32 +179,32 @@ void EventHandlerImplementation::WakeupHandler(intptr_t id, |
| void EventHandlerImplementation::HandleInterruptFd() { |
| - InterruptMessage msg; |
| - intptr_t available = FDUtils::AvailableBytes(interrupt_fds_[0]); |
| - for (int i = 0; |
| - i + kInterruptMessageSize <= available; |
| - i += kInterruptMessageSize) { |
| - VOID_TEMP_FAILURE_RETRY(read(interrupt_fds_[0], |
| - reinterpret_cast<char*>(&msg), |
| - kInterruptMessageSize)); |
| - if (msg.id == kTimerId) { |
| - timeout_queue_.UpdateTimeout(msg.dart_port, msg.data); |
| - } else if (msg.id == kShutdownId) { |
| + const intptr_t BUFFER_SIZE = 8 * kInterruptMessageSize; |
| + char buffer[BUFFER_SIZE]; |
| + ssize_t bytes = TEMP_FAILURE_RETRY(read(interrupt_fds_[0], |
| + buffer, |
| + BUFFER_SIZE)); |
| + for (ssize_t i = 0; i < bytes / kInterruptMessageSize; i++) { |
|
Søren Gjesse
2013/11/22 12:40:23
How about
InterruptMessage msg[8];
read( ... msg
Anders Johnsen
2013/11/22 12:50:22
Done.
|
| + InterruptMessage* msg = reinterpret_cast<InterruptMessage*>( |
| + buffer + i * kInterruptMessageSize); |
| + if (msg->id == kTimerId) { |
| + timeout_queue_.UpdateTimeout(msg->dart_port, msg->data); |
| + } else if (msg->id == kShutdownId) { |
| shutdown_ = true; |
| } else { |
| - SocketData* sd = GetSocketData(msg.id); |
| - if ((msg.data & (1 << kShutdownReadCommand)) != 0) { |
| - ASSERT(msg.data == (1 << kShutdownReadCommand)); |
| + SocketData* sd = GetSocketData(msg->id); |
| + if ((msg->data & (1 << kShutdownReadCommand)) != 0) { |
| + ASSERT(msg->data == (1 << kShutdownReadCommand)); |
| // Close the socket for reading. |
| sd->ShutdownRead(); |
| UpdateEpollInstance(epoll_fd_, sd); |
| - } else if ((msg.data & (1 << kShutdownWriteCommand)) != 0) { |
| - ASSERT(msg.data == (1 << kShutdownWriteCommand)); |
| + } else if ((msg->data & (1 << kShutdownWriteCommand)) != 0) { |
| + ASSERT(msg->data == (1 << kShutdownWriteCommand)); |
| // Close the socket for writing. |
| sd->ShutdownWrite(); |
| UpdateEpollInstance(epoll_fd_, sd); |
| - } else if ((msg.data & (1 << kCloseCommand)) != 0) { |
| - ASSERT(msg.data == (1 << kCloseCommand)); |
| + } else if ((msg->data & (1 << kCloseCommand)) != 0) { |
| + ASSERT(msg->data == (1 << kCloseCommand)); |
| // Close the socket and free system resources and move on to |
| // next message. |
| RemoveFromEpollInstance(epoll_fd_, sd); |
| @@ -220,10 +220,10 @@ void EventHandlerImplementation::HandleInterruptFd() { |
| } |
| socket_map_.Remove(GetHashmapKeyFromFd(fd), GetHashmapHashFromFd(fd)); |
| delete sd; |
| - DartUtils::PostInt32(msg.dart_port, 1 << kDestroyedEvent); |
| + DartUtils::PostInt32(msg->dart_port, 1 << kDestroyedEvent); |
| } else { |
| // Setup events to wait for. |
| - sd->SetPortAndMask(msg.dart_port, msg.data); |
| + sd->SetPortAndMask(msg->dart_port, msg->data); |
| UpdateEpollInstance(epoll_fd_, sd); |
| } |
| } |