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

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

Issue 2651033004: Fix Windows debug assertion when cancelling pending i/o (Closed)
Patch Set: Created 3 years, 10 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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_WINDOWS) 8 #if defined(TARGET_OS_WINDOWS)
9 9
10 #include "bin/eventhandler.h" 10 #include "bin/eventhandler.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 handle(), completion_port, reinterpret_cast<ULONG_PTR>(this), 0); 142 handle(), completion_port, reinterpret_cast<ULONG_PTR>(this), 0);
143 return (completion_port_ != NULL); 143 return (completion_port_ != NULL);
144 } 144 }
145 145
146 146
147 void Handle::Close() { 147 void Handle::Close() {
148 if (!SupportsOverlappedIO()) { 148 if (!SupportsOverlappedIO()) {
149 // If the handle uses synchronous I/O (e.g. stdin), cancel any pending 149 // If the handle uses synchronous I/O (e.g. stdin), cancel any pending
150 // operation before closing the handle, so the read thread is not blocked. 150 // operation before closing the handle, so the read thread is not blocked.
151 BOOL result = CancelIoEx(handle_, NULL); 151 BOOL result = CancelIoEx(handle_, NULL);
152 ASSERT(result); 152 ASSERT(result || (GetLastError() == ERROR_NOT_FOUND));
153 } 153 }
154 MonitorLocker ml(monitor_); 154 MonitorLocker ml(monitor_);
155 if (!IsClosing()) { 155 if (!IsClosing()) {
156 // Close the socket and set the closing state. This close method can be 156 // Close the socket and set the closing state. This close method can be
157 // called again if this socket has pending IO operations in flight. 157 // called again if this socket has pending IO operations in flight.
158 MarkClosing(); 158 MarkClosing();
159 // Perform handle type specific closing. 159 // Perform handle type specific closing.
160 DoClose(); 160 DoClose();
161 } 161 }
162 ASSERT(IsHandleClosed()); 162 ASSERT(IsHandleClosed());
(...skipping 1293 matching lines...) Expand 10 before | Expand all | Expand 10 after
1456 void EventHandlerImplementation::Shutdown() { 1456 void EventHandlerImplementation::Shutdown() {
1457 SendData(kShutdownId, 0, 0); 1457 SendData(kShutdownId, 0, 0);
1458 } 1458 }
1459 1459
1460 } // namespace bin 1460 } // namespace bin
1461 } // namespace dart 1461 } // namespace dart
1462 1462
1463 #endif // defined(TARGET_OS_WINDOWS) 1463 #endif // defined(TARGET_OS_WINDOWS)
1464 1464
1465 #endif // !defined(DART_IO_DISABLED) 1465 #endif // !defined(DART_IO_DISABLED)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698