| 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 #ifndef BIN_EVENTHANDLER_LINUX_H_ | 5 #ifndef BIN_EVENTHANDLER_LINUX_H_ | 
| 6 #define BIN_EVENTHANDLER_LINUX_H_ | 6 #define BIN_EVENTHANDLER_LINUX_H_ | 
| 7 | 7 | 
| 8 #if !defined(BIN_EVENTHANDLER_H_) | 8 #if !defined(BIN_EVENTHANDLER_H_) | 
| 9 #error Do not include eventhandler_linux.h directly; use eventhandler.h instead. | 9 #error Do not include eventhandler_linux.h directly; use eventhandler.h instead. | 
| 10 #endif | 10 #endif | 
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 180   bool AddPort(Dart_Port port) { | 180   bool AddPort(Dart_Port port) { | 
| 181     HashMap::Entry* entry = tokens_map_.Lookup( | 181     HashMap::Entry* entry = tokens_map_.Lookup( | 
| 182         GetHashmapKeyFromPort(port), GetHashmapHashFromPort(port), true); | 182         GetHashmapKeyFromPort(port), GetHashmapHashFromPort(port), true); | 
| 183     entry->value = reinterpret_cast<void*>(kTokenCount); | 183     entry->value = reinterpret_cast<void*>(kTokenCount); | 
| 184     return live_ports_.Add(port); | 184     return live_ports_.Add(port); | 
| 185   } | 185   } | 
| 186 | 186 | 
| 187   virtual bool RemovePort(Dart_Port port) { | 187   virtual bool RemovePort(Dart_Port port) { | 
| 188     HashMap::Entry* entry = tokens_map_.Lookup( | 188     HashMap::Entry* entry = tokens_map_.Lookup( | 
| 189         GetHashmapKeyFromPort(port), GetHashmapHashFromPort(port), false); | 189         GetHashmapKeyFromPort(port), GetHashmapHashFromPort(port), false); | 
| 190     ASSERT(entry != NULL); | 190     if (entry != NULL) { | 
| 191     intptr_t tokens = reinterpret_cast<intptr_t>(entry->value); | 191       intptr_t tokens = reinterpret_cast<intptr_t>(entry->value); | 
| 192     if (tokens == 0) { | 192       if (tokens == 0) { | 
| 193       while (idle_ports_.head() != port) { | 193         while (idle_ports_.head() != port) { | 
| 194         idle_ports_.Rotate(); | 194           idle_ports_.Rotate(); | 
|  | 195         } | 
|  | 196         idle_ports_.RemoveHead(); | 
|  | 197       } else { | 
|  | 198         while (live_ports_.head() != port) { | 
|  | 199           live_ports_.Rotate(); | 
|  | 200         } | 
|  | 201         live_ports_.RemoveHead(); | 
| 195       } | 202       } | 
| 196       idle_ports_.RemoveHead(); | 203       tokens_map_.Remove( | 
|  | 204           GetHashmapKeyFromPort(port), GetHashmapHashFromPort(port)); | 
| 197     } else { | 205     } else { | 
| 198       while (live_ports_.head() != port) { | 206       // NOTE: This is a listening socket which has been immediately closed. | 
| 199         live_ports_.Rotate(); | 207       // | 
| 200       } | 208       // If a listening socket is not listened on, the event handler does not | 
| 201       live_ports_.RemoveHead(); | 209       // know about it beforehand. So the first time the event handler knows | 
|  | 210       // about it, is when it is supposed to be closed. We therefore do nothing | 
|  | 211       // here. | 
|  | 212       // | 
|  | 213       // But whether to close it, depends on whether other isolates have it open | 
|  | 214       // as well or not. | 
| 202     } | 215     } | 
| 203     tokens_map_.Remove( |  | 
| 204         GetHashmapKeyFromPort(port), GetHashmapHashFromPort(port)); |  | 
| 205     return !live_ports_.HasHead(); | 216     return !live_ports_.HasHead(); | 
| 206   } | 217   } | 
| 207 | 218 | 
| 208   bool TakeToken() { | 219   bool TakeToken() { | 
| 209     ASSERT(live_ports_.HasHead()); | 220     ASSERT(live_ports_.HasHead()); | 
| 210     Dart_Port port = live_ports_.head(); | 221     Dart_Port port = live_ports_.head(); | 
| 211     HashMap::Entry* entry = tokens_map_.Lookup( | 222     HashMap::Entry* entry = tokens_map_.Lookup( | 
| 212         GetHashmapKeyFromPort(port), GetHashmapHashFromPort(port), false); | 223         GetHashmapKeyFromPort(port), GetHashmapHashFromPort(port), false); | 
| 213     ASSERT(entry != NULL); | 224     ASSERT(entry != NULL); | 
| 214     intptr_t tokens = reinterpret_cast<intptr_t>(entry->value); | 225     intptr_t tokens = reinterpret_cast<intptr_t>(entry->value); | 
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 282   bool shutdown_; | 293   bool shutdown_; | 
| 283   int interrupt_fds_[2]; | 294   int interrupt_fds_[2]; | 
| 284   int epoll_fd_; | 295   int epoll_fd_; | 
| 285   int timer_fd_; | 296   int timer_fd_; | 
| 286 }; | 297 }; | 
| 287 | 298 | 
| 288 }  // namespace bin | 299 }  // namespace bin | 
| 289 }  // namespace dart | 300 }  // namespace dart | 
| 290 | 301 | 
| 291 #endif  // BIN_EVENTHANDLER_LINUX_H_ | 302 #endif  // BIN_EVENTHANDLER_LINUX_H_ | 
| OLD | NEW | 
|---|