| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 #if !defined(DART_IO_DISABLED) | 5 #if !defined(DART_IO_DISABLED) |
| 6 | 6 |
| 7 #include "platform/globals.h" | 7 #include "platform/globals.h" |
| 8 #if defined(TARGET_OS_FUCHSIA) | 8 #if defined(TARGET_OS_FUCHSIA) |
| 9 | 9 |
| 10 #include "bin/eventhandler.h" | 10 #include "bin/eventhandler.h" |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 if (signals_states_ == NULL) { | 137 if (signals_states_ == NULL) { |
| 138 FATAL("Failed to grow signals_states array"); | 138 FATAL("Failed to grow signals_states array"); |
| 139 } | 139 } |
| 140 capacity_ = new_capacity; | 140 capacity_ = new_capacity; |
| 141 LOG_INFO("GrowArraysIfNeeded(%ld), capacity = %ld\n", | 141 LOG_INFO("GrowArraysIfNeeded(%ld), capacity = %ld\n", |
| 142 desired_size, capacity_); | 142 desired_size, capacity_); |
| 143 } | 143 } |
| 144 | 144 |
| 145 | 145 |
| 146 EventHandlerImplementation::EventHandlerImplementation() { | 146 EventHandlerImplementation::EventHandlerImplementation() { |
| 147 mx_status_t status = mx_msgpipe_create(interrupt_handles_, 0); | 147 mx_status_t status = mx_channel_create(0, &interrupt_handles_[0], |
| 148 &interrupt_handles_[1]); |
| 148 if (status != NO_ERROR) { | 149 if (status != NO_ERROR) { |
| 149 FATAL1("mx_msgpipe_create failed: %s\n", mx_status_get_string(status)); | 150 FATAL1("mx_channel_create failed: %s\n", mx_status_get_string(status)); |
| 150 } | 151 } |
| 151 shutdown_ = false; | 152 shutdown_ = false; |
| 152 info_.AddHandle(interrupt_handles_[0], | 153 info_.AddHandle(interrupt_handles_[0], |
| 153 MX_SIGNAL_READABLE | MX_SIGNAL_PEER_CLOSED, | 154 MX_SIGNAL_READABLE | MX_SIGNAL_PEER_CLOSED, |
| 154 NULL); | 155 NULL); |
| 155 LOG_INFO("EventHandlerImplementation initialized\n"); | 156 LOG_INFO("EventHandlerImplementation initialized\n"); |
| 156 } | 157 } |
| 157 | 158 |
| 158 | 159 |
| 159 EventHandlerImplementation::~EventHandlerImplementation() { | 160 EventHandlerImplementation::~EventHandlerImplementation() { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 171 | 172 |
| 172 void EventHandlerImplementation::WakeupHandler(intptr_t id, | 173 void EventHandlerImplementation::WakeupHandler(intptr_t id, |
| 173 Dart_Port dart_port, | 174 Dart_Port dart_port, |
| 174 int64_t data) { | 175 int64_t data) { |
| 175 InterruptMessage msg; | 176 InterruptMessage msg; |
| 176 msg.id = id; | 177 msg.id = id; |
| 177 msg.dart_port = dart_port; | 178 msg.dart_port = dart_port; |
| 178 msg.data = data; | 179 msg.data = data; |
| 179 | 180 |
| 180 mx_status_t status = | 181 mx_status_t status = |
| 181 mx_msgpipe_write(interrupt_handles_[1], &msg, sizeof(msg), NULL, 0, 0); | 182 mx_channel_write(interrupt_handles_[1], 0, &msg, sizeof(msg), NULL, 0); |
| 182 if (status != NO_ERROR) { | 183 if (status != NO_ERROR) { |
| 183 FATAL1("mx_msgpipe_write failed: %s\n", mx_status_get_string(status)); | 184 FATAL1("mx_channel_write failed: %s\n", mx_status_get_string(status)); |
| 184 } | 185 } |
| 185 LOG_INFO("WakeupHandler(%ld, %ld, %lld)\n", id, dart_port, data); | 186 LOG_INFO("WakeupHandler(%ld, %ld, %lld)\n", id, dart_port, data); |
| 186 } | 187 } |
| 187 | 188 |
| 188 | 189 |
| 189 void EventHandlerImplementation::HandleInterruptFd() { | 190 void EventHandlerImplementation::HandleInterruptFd() { |
| 190 LOG_INFO("HandleInterruptFd entry\n"); | 191 LOG_INFO("HandleInterruptFd entry\n"); |
| 191 InterruptMessage msg; | 192 InterruptMessage msg; |
| 192 uint32_t bytes = kInterruptMessageSize; | 193 uint32_t bytes = kInterruptMessageSize; |
| 193 mx_status_t status; | 194 mx_status_t status; |
| 194 while (true) { | 195 while (true) { |
| 195 status = mx_msgpipe_read( | 196 status = mx_channel_read( |
| 196 interrupt_handles_[0], &msg, &bytes, NULL, NULL, 0); | 197 interrupt_handles_[0], 0, &msg, bytes, &bytes, NULL, 0, NULL); |
| 197 if (status != NO_ERROR) { | 198 if (status != NO_ERROR) { |
| 198 break; | 199 break; |
| 199 } | 200 } |
| 200 ASSERT(bytes == kInterruptMessageSize); | 201 ASSERT(bytes == kInterruptMessageSize); |
| 201 if (msg.id == kTimerId) { | 202 if (msg.id == kTimerId) { |
| 202 LOG_INFO("HandleInterruptFd read timer update\n"); | 203 LOG_INFO("HandleInterruptFd read timer update\n"); |
| 203 timeout_queue_.UpdateTimeout(msg.dart_port, msg.data); | 204 timeout_queue_.UpdateTimeout(msg.dart_port, msg.data); |
| 204 } else if (msg.id == kShutdownId) { | 205 } else if (msg.id == kShutdownId) { |
| 205 LOG_INFO("HandleInterruptFd read shutdown\n"); | 206 LOG_INFO("HandleInterruptFd read shutdown\n"); |
| 206 shutdown_ = true; | 207 shutdown_ = true; |
| 207 } else { | 208 } else { |
| 208 // TODO(zra): Handle commands to add and remove handles from the | 209 // TODO(zra): Handle commands to add and remove handles from the |
| 209 // MagentaWaitManyInfo. | 210 // MagentaWaitManyInfo. |
| 210 UNIMPLEMENTED(); | 211 UNIMPLEMENTED(); |
| 211 } | 212 } |
| 212 } | 213 } |
| 213 // status == ERR_SHOULD_WAIT when we try to read and there are no messages | 214 // status == ERR_SHOULD_WAIT when we try to read and there are no messages |
| 214 // available, so it is an error if we get here and status != ERR_SHOULD_WAIT. | 215 // available, so it is an error if we get here and status != ERR_SHOULD_WAIT. |
| 215 if (status != ERR_SHOULD_WAIT) { | 216 if (status != ERR_SHOULD_WAIT) { |
| 216 FATAL1("mx_msgpipe_read failed: %s\n", mx_status_get_string(status)); | 217 FATAL1("mx_channel_read failed: %s\n", mx_status_get_string(status)); |
| 217 } | 218 } |
| 218 LOG_INFO("HandleInterruptFd exit\n"); | 219 LOG_INFO("HandleInterruptFd exit\n"); |
| 219 } | 220 } |
| 220 | 221 |
| 221 | 222 |
| 222 void EventHandlerImplementation::HandleEvents() { | 223 void EventHandlerImplementation::HandleEvents() { |
| 223 LOG_INFO("HandleEvents entry\n"); | 224 LOG_INFO("HandleEvents entry\n"); |
| 224 for (intptr_t i = 1; i < info_.size(); i++) { | 225 for (intptr_t i = 1; i < info_.size(); i++) { |
| 225 if (info_.signals_states()[i].satisfied != MX_SIGNAL_NONE) { | 226 if (info_.signals_states()[i].satisfied != MX_SIGNAL_NONE) { |
| 226 // Only the control handle has no descriptor info. | 227 // Only the control handle has no descriptor info. |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 int64_t data) { | 321 int64_t data) { |
| 321 WakeupHandler(id, dart_port, data); | 322 WakeupHandler(id, dart_port, data); |
| 322 } | 323 } |
| 323 | 324 |
| 324 } // namespace bin | 325 } // namespace bin |
| 325 } // namespace dart | 326 } // namespace dart |
| 326 | 327 |
| 327 #endif // defined(TARGET_OS_FUCHSIA) | 328 #endif // defined(TARGET_OS_FUCHSIA) |
| 328 | 329 |
| 329 #endif // !defined(DART_IO_DISABLED) | 330 #endif // !defined(DART_IO_DISABLED) |
| OLD | NEW |