Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Side by Side Diff: runtime/bin/eventhandler_win.h

Issue 1275353005: VM thread shutdown. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_WIN_H_ 5 #ifndef BIN_EVENTHANDLER_WIN_H_
6 #define BIN_EVENTHANDLER_WIN_H_ 6 #define BIN_EVENTHANDLER_WIN_H_
7 7
8 #if !defined(BIN_EVENTHANDLER_H_) 8 #if !defined(BIN_EVENTHANDLER_H_)
9 #error Do not include eventhandler_win.h directly; use eventhandler.h instead. 9 #error Do not include eventhandler_win.h directly; use eventhandler.h instead.
10 #endif 10 #endif
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 HANDLE handle_; 268 HANDLE handle_;
269 HANDLE completion_port_; 269 HANDLE completion_port_;
270 EventHandlerImplementation* event_handler_; 270 EventHandlerImplementation* event_handler_;
271 271
272 OverlappedBuffer* data_ready_; // Buffer for data ready to be read. 272 OverlappedBuffer* data_ready_; // Buffer for data ready to be read.
273 OverlappedBuffer* pending_read_; // Buffer for pending read. 273 OverlappedBuffer* pending_read_; // Buffer for pending read.
274 OverlappedBuffer* pending_write_; // Buffer for pending write 274 OverlappedBuffer* pending_write_; // Buffer for pending write
275 275
276 DWORD last_error_; 276 DWORD last_error_;
277 277
278 ThreadId read_thread_id_;
279 bool read_thread_exists_;
280 Monitor* read_thread_monitor_;
281
278 private: 282 private:
279 int flags_; 283 int flags_;
280 CRITICAL_SECTION cs_; // Critical section protecting this object. 284 CRITICAL_SECTION cs_; // Critical section protecting this object.
281 }; 285 };
282 286
283 287
284 class FileHandle : public DescriptorInfoSingleMixin<Handle> { 288 class FileHandle : public DescriptorInfoSingleMixin<Handle> {
285 public: 289 public:
286 explicit FileHandle(HANDLE handle) 290 explicit FileHandle(HANDLE handle)
287 : DescriptorInfoSingleMixin(reinterpret_cast<intptr_t>(handle), true) { 291 : DescriptorInfoSingleMixin(reinterpret_cast<intptr_t>(handle), true) {
288 type_ = kFile; 292 type_ = kFile;
289 } 293 }
290 294
291 virtual void EnsureInitialized(EventHandlerImplementation* event_handler); 295 virtual void EnsureInitialized(EventHandlerImplementation* event_handler);
292 virtual bool IsClosed(); 296 virtual bool IsClosed();
293 }; 297 };
294 298
295 299
296 class StdHandle : public FileHandle { 300 class StdHandle : public FileHandle {
297 public: 301 public:
298 explicit StdHandle(HANDLE handle) 302 explicit StdHandle(HANDLE handle)
299 : FileHandle(handle), 303 : FileHandle(handle),
304 thread_id_(Thread::kInvalidThreadId),
300 thread_wrote_(0), 305 thread_wrote_(0),
301 write_thread_exists_(false), 306 write_thread_exists_(false),
302 write_thread_running_(false), 307 write_thread_running_(false),
303 write_monitor_(new Monitor()) { 308 write_monitor_(new Monitor()) {
304 type_ = kStd; 309 type_ = kStd;
305 } 310 }
306 311
307 ~StdHandle() { 312 ~StdHandle() {
308 delete write_monitor_; 313 delete write_monitor_;
309 } 314 }
310 315
311 virtual void DoClose(); 316 virtual void DoClose();
312 virtual intptr_t Write(const void* buffer, intptr_t num_bytes); 317 virtual intptr_t Write(const void* buffer, intptr_t num_bytes);
313 318
314 void WriteSyncCompleteAsync(); 319 void WriteSyncCompleteAsync();
315 void RunWriteLoop(); 320 void RunWriteLoop();
316 321
317 private: 322 private:
323 ThreadId thread_id_;
318 intptr_t thread_wrote_; 324 intptr_t thread_wrote_;
319 bool write_thread_exists_; 325 bool write_thread_exists_;
320 bool write_thread_running_; 326 bool write_thread_running_;
321 Monitor* write_monitor_; 327 Monitor* write_monitor_;
322 }; 328 };
323 329
324 330
325 class DirectoryWatchHandle : public DescriptorInfoSingleMixin<Handle> { 331 class DirectoryWatchHandle : public DescriptorInfoSingleMixin<Handle> {
326 public: 332 public:
327 DirectoryWatchHandle(HANDLE handle, int events, bool recursive) 333 DirectoryWatchHandle(HANDLE handle, int events, bool recursive)
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 void HandleConnect(ClientSocket* client_socket, 525 void HandleConnect(ClientSocket* client_socket,
520 int bytes, 526 int bytes,
521 OverlappedBuffer* buffer); 527 OverlappedBuffer* buffer);
522 void HandleIOCompletion(DWORD bytes, ULONG_PTR key, OVERLAPPED* overlapped); 528 void HandleIOCompletion(DWORD bytes, ULONG_PTR key, OVERLAPPED* overlapped);
523 529
524 HANDLE completion_port() { return completion_port_; } 530 HANDLE completion_port() { return completion_port_; }
525 531
526 private: 532 private:
527 ClientSocket* client_sockets_head_; 533 ClientSocket* client_sockets_head_;
528 534
535 Monitor* startup_monitor_;
536 ThreadId handler_thread_id_;
537
529 TimeoutQueue timeout_queue_; // Time for next timeout. 538 TimeoutQueue timeout_queue_; // Time for next timeout.
530 bool shutdown_; 539 bool shutdown_;
531 HANDLE completion_port_; 540 HANDLE completion_port_;
532 }; 541 };
533 542
534 } // namespace bin 543 } // namespace bin
535 } // namespace dart 544 } // namespace dart
536 545
537 #endif // BIN_EVENTHANDLER_WIN_H_ 546 #endif // BIN_EVENTHANDLER_WIN_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698