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

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

Issue 426923003: Be sure we don't delete a ClientSocket, until 'connect' is completed. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 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 | Annotate | Revision Log
« 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 #include "platform/globals.h" 5 #include "platform/globals.h"
6 #if defined(TARGET_OS_WINDOWS) 6 #if defined(TARGET_OS_WINDOWS)
7 7
8 #include "bin/eventhandler.h" 8 #include "bin/eventhandler.h"
9 9
10 #include <winsock2.h> // NOLINT 10 #include <winsock2.h> // NOLINT
(...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after
891 OverlappedBuffer::DisposeBuffer(data_ready_); 891 OverlappedBuffer::DisposeBuffer(data_ready_);
892 } 892 }
893 closed_ = true; 893 closed_ = true;
894 } 894 }
895 895
896 896
897 void ClientSocket::ConnectComplete(OverlappedBuffer* buffer) { 897 void ClientSocket::ConnectComplete(OverlappedBuffer* buffer) {
898 OverlappedBuffer::DisposeBuffer(buffer); 898 OverlappedBuffer::DisposeBuffer(buffer);
899 // Update socket to support full socket API, after ConnectEx completed. 899 // Update socket to support full socket API, after ConnectEx completed.
900 setsockopt(socket(), SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, NULL, 0); 900 setsockopt(socket(), SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, NULL, 0);
901 connected_ = true;
902 Dart_Port p = port(); 901 Dart_Port p = port();
903 if (p != ILLEGAL_PORT) { 902 if (p != ILLEGAL_PORT) {
904 // If the port is set, we already listen for this socket in Dart. 903 // If the port is set, we already listen for this socket in Dart.
905 // Handle the cases here. 904 // Handle the cases here.
906 if (!IsClosedRead()) { 905 if (!IsClosedRead()) {
907 IssueRead(); 906 IssueRead();
908 } 907 }
909 if (!IsClosedWrite()) { 908 if (!IsClosedWrite()) {
910 DartUtils::PostInt32(p, 1 << kOutEvent); 909 DartUtils::PostInt32(p, 1 << kOutEvent);
911 } 910 }
912 } 911 }
913 } 912 }
914 913
915 914
916 void ClientSocket::EnsureInitialized( 915 void ClientSocket::EnsureInitialized(
917 EventHandlerImplementation* event_handler) { 916 EventHandlerImplementation* event_handler) {
918 ScopedLock lock(this); 917 ScopedLock lock(this);
919 if (completion_port_ == INVALID_HANDLE_VALUE) { 918 if (completion_port_ == INVALID_HANDLE_VALUE) {
920 ASSERT(event_handler_ == NULL); 919 ASSERT(event_handler_ == NULL);
921 event_handler_ = event_handler; 920 event_handler_ = event_handler;
922 CreateCompletionPort(event_handler_->completion_port()); 921 CreateCompletionPort(event_handler_->completion_port());
923 } 922 }
924 } 923 }
925 924
926 925
927 bool ClientSocket::IsClosed() { 926 bool ClientSocket::IsClosed() {
928 return closed_; 927 return connected_ && closed_;
929 } 928 }
930 929
931 930
932 bool DatagramSocket::IssueSendTo(struct sockaddr* sa, socklen_t sa_len) { 931 bool DatagramSocket::IssueSendTo(struct sockaddr* sa, socklen_t sa_len) {
933 ScopedLock lock(this); 932 ScopedLock lock(this);
934 ASSERT(completion_port_ != INVALID_HANDLE_VALUE); 933 ASSERT(completion_port_ != INVALID_HANDLE_VALUE);
935 ASSERT(pending_write_ != NULL); 934 ASSERT(pending_write_ != NULL);
936 ASSERT(pending_write_->operation() == OverlappedBuffer::kSendTo); 935 ASSERT(pending_write_->operation() == OverlappedBuffer::kSendTo);
937 936
938 int rc = WSASendTo(socket(), 937 int rc = WSASendTo(socket(),
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
1190 void EventHandlerImplementation::HandleConnect( 1189 void EventHandlerImplementation::HandleConnect(
1191 ClientSocket* client_socket, 1190 ClientSocket* client_socket,
1192 int bytes, 1191 int bytes,
1193 OverlappedBuffer* buffer) { 1192 OverlappedBuffer* buffer) {
1194 if (bytes < 0) { 1193 if (bytes < 0) {
1195 HandleError(client_socket); 1194 HandleError(client_socket);
1196 OverlappedBuffer::DisposeBuffer(buffer); 1195 OverlappedBuffer::DisposeBuffer(buffer);
1197 } else { 1196 } else {
1198 client_socket->ConnectComplete(buffer); 1197 client_socket->ConnectComplete(buffer);
1199 } 1198 }
1199 client_socket->mark_connected();
1200 DeleteIfClosed(client_socket);
1200 } 1201 }
1201 1202
1202 1203
1203 void EventHandlerImplementation::HandleTimeout() { 1204 void EventHandlerImplementation::HandleTimeout() {
1204 if (!timeout_queue_.HasTimeout()) return; 1205 if (!timeout_queue_.HasTimeout()) return;
1205 DartUtils::PostNull(timeout_queue_.CurrentPort()); 1206 DartUtils::PostNull(timeout_queue_.CurrentPort());
1206 timeout_queue_.RemoveCurrent(); 1207 timeout_queue_.RemoveCurrent();
1207 } 1208 }
1208 1209
1209 1210
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
1362 1363
1363 1364
1364 void EventHandlerImplementation::Shutdown() { 1365 void EventHandlerImplementation::Shutdown() {
1365 SendData(kShutdownId, 0, 0); 1366 SendData(kShutdownId, 0, 0);
1366 } 1367 }
1367 1368
1368 } // namespace bin 1369 } // namespace bin
1369 } // namespace dart 1370 } // namespace dart
1370 1371
1371 #endif // defined(TARGET_OS_WINDOWS) 1372 #endif // defined(TARGET_OS_WINDOWS)
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