Index: runtime/bin/eventhandler_win.cc |
diff --git a/runtime/bin/eventhandler_win.cc b/runtime/bin/eventhandler_win.cc |
index 1b1202894f72e150e591b13cc7e296075b3f58da..17bd33e425d879012fec95fb5bc903a21ee5895d 100644 |
--- a/runtime/bin/eventhandler_win.cc |
+++ b/runtime/bin/eventhandler_win.cc |
@@ -91,7 +91,7 @@ int IOBuffer::GetRemainingLength() { |
Handle::Handle(HANDLE handle) |
: handle_(reinterpret_cast<HANDLE>(handle)), |
- closing_(false), |
+ flags_(0), |
port_(0), |
completion_port_(INVALID_HANDLE_VALUE), |
event_handler_(NULL), |
@@ -104,7 +104,7 @@ Handle::Handle(HANDLE handle) |
Handle::Handle(HANDLE handle, Dart_Port port) |
: handle_(reinterpret_cast<HANDLE>(handle)), |
- closing_(false), |
+ flags_(0), |
port_(port), |
completion_port_(INVALID_HANDLE_VALUE), |
event_handler_(NULL), |
@@ -145,11 +145,11 @@ bool Handle::CreateCompletionPort(HANDLE completion_port) { |
void Handle::close() { |
ScopedLock lock(this); |
- if (!closing_) { |
+ if (!IsClosing()) { |
// Close the socket and set the closing state. This close method can be |
// called again if this socket has pending IO operations in flight. |
ASSERT(handle_ != INVALID_HANDLE_VALUE); |
- closing_ = true; |
+ MarkClosing(); |
// According to the documentation from Microsoft socket handles should |
// not be closed using CloseHandle but using closesocket. |
if (is_socket()) { |
@@ -182,7 +182,7 @@ void Handle::ReadComplete(IOBuffer* buffer) { |
// Currently only one outstanding read at the time. |
ASSERT(pending_read_ == buffer); |
ASSERT(data_ready_ == NULL); |
- if (!closing_ && !buffer->IsEmpty()) { |
+ if (!IsClosing() && !buffer->IsEmpty()) { |
data_ready_ = pending_read_; |
} else { |
IOBuffer::DisposeBuffer(buffer); |
@@ -341,7 +341,7 @@ bool ListenSocket::IssueAccept() { |
void ListenSocket::AcceptComplete(IOBuffer* buffer, HANDLE completion_port) { |
ScopedLock lock(this); |
- if (!closing_) { |
+ if (!IsClosing()) { |
// Update the accepted socket to support the full range of API calls. |
SOCKET s = socket(); |
int rc = setsockopt(buffer->client(), |
@@ -410,7 +410,7 @@ void ListenSocket::AfterClose() { |
bool ListenSocket::IsClosed() { |
- return closing_ && !HasPendingAccept(); |
+ return IsClosing() && !HasPendingAccept(); |
} |
@@ -534,7 +534,7 @@ void ClientSocket::AfterClose() { |
bool ClientSocket::IsClosed() { |
- return closing_ && !HasPendingRead() && !HasPendingWrite(); |
+ return IsClosing() && !HasPendingRead() && !HasPendingWrite(); |
} |
@@ -545,13 +545,12 @@ void EventHandlerImplementation::HandleInterrupt(InterruptMessage* msg) { |
timeout_ = msg->data; |
timeout_port_ = msg->dart_port; |
} else { |
- bool delete_socket = false; |
- Handle* socket_desc = |
- reinterpret_cast<Handle*>(msg->id); |
- ASSERT(socket_desc != NULL); |
- if (socket_desc->is_listen_socket()) { |
+ bool delete_handle = false; |
+ Handle* handle = reinterpret_cast<Handle*>(msg->id); |
+ ASSERT(handle != NULL); |
+ if (handle->is_listen_socket()) { |
ListenSocket* listen_socket = |
- reinterpret_cast<ListenSocket*>(socket_desc); |
+ reinterpret_cast<ListenSocket*>(handle); |
listen_socket->EnsureInitialized(this); |
listen_socket->SetPortAndMask(msg->dart_port, msg->data); |
@@ -568,56 +567,57 @@ void EventHandlerImplementation::HandleInterrupt(InterruptMessage* msg) { |
if ((msg->data & (1 << kCloseCommand)) != 0) { |
listen_socket->close(); |
if (listen_socket->IsClosed()) { |
- delete_socket = true; |
+ delete_handle = true; |
} |
} |
} else { |
- ClientSocket* client_socket = |
- reinterpret_cast<ClientSocket*>(socket_desc); |
- client_socket->SetPortAndMask(msg->dart_port, msg->data); |
- client_socket->EnsureInitialized(this); |
+ handle->SetPortAndMask(msg->dart_port, msg->data); |
+ handle->EnsureInitialized(this); |
- Handle::ScopedLock lock(client_socket); |
+ Handle::ScopedLock lock(handle); |
// If the data available callback has been requested and data are |
// available post it immediately. Otherwise make sure that a pending |
// read is issued unless the socket is already closed for read. |
if ((msg->data & (1 << kInEvent)) != 0) { |
- if (client_socket->Available() > 0) { |
+ if (handle->Available() > 0) { |
int event_mask = (1 << kInEvent); |
- Dart_PostIntArray(client_socket->port(), 1, &event_mask); |
- } else if (!client_socket->HasPendingRead() && |
- !client_socket->IsClosedRead()) { |
- client_socket->IssueRead(); |
+ Dart_PostIntArray(handle->port(), 1, &event_mask); |
+ } else if (!handle->HasPendingRead() && |
+ !handle->IsClosedRead()) { |
+ handle->IssueRead(); |
} |
} |
// If can send callback had been requested and there is no pending |
// send post it immediately. |
if ((msg->data & (1 << kOutEvent)) != 0) { |
- if (!client_socket->HasPendingWrite()) { |
+ if (!handle->HasPendingWrite()) { |
int event_mask = (1 << kOutEvent); |
- Dart_PostIntArray(client_socket->port(), 1, &event_mask); |
+ Dart_PostIntArray(handle->port(), 1, &event_mask); |
} |
} |
- if ((msg->data & (1 << kShutdownReadCommand)) != 0) { |
- client_socket->Shutdown(SD_RECEIVE); |
- } |
+ if (handle->is_client_socket()) { |
+ ClientSocket* client_socket = reinterpret_cast<ClientSocket*>(handle); |
+ if ((msg->data & (1 << kShutdownReadCommand)) != 0) { |
+ client_socket->Shutdown(SD_RECEIVE); |
+ } |
- if ((msg->data & (1 << kShutdownWriteCommand)) != 0) { |
- client_socket->Shutdown(SD_SEND); |
+ if ((msg->data & (1 << kShutdownWriteCommand)) != 0) { |
+ client_socket->Shutdown(SD_SEND); |
+ } |
} |
if ((msg->data & (1 << kCloseCommand)) != 0) { |
- client_socket->close(); |
- if (client_socket->IsClosed()) { |
- delete_socket = true; |
+ handle->close(); |
+ if (handle->IsClosed()) { |
+ delete_handle = true; |
} |
} |
} |
- if (delete_socket) { |
- delete socket_desc; |
+ if (delete_handle) { |
+ delete handle; |
} |
} |
} |
@@ -627,7 +627,7 @@ void EventHandlerImplementation::HandleAccept(ListenSocket* listen_socket, |
IOBuffer* buffer) { |
listen_socket->AcceptComplete(buffer, completion_port_); |
- if (!listen_socket->is_closing()) { |
+ if (!listen_socket->IsClosing()) { |
int event_mask = 1 << kInEvent; |
if ((listen_socket->mask() & event_mask) != 0) { |
Dart_PostIntArray(listen_socket->port(), 1, &event_mask); |
@@ -641,7 +641,7 @@ void EventHandlerImplementation::HandleAccept(ListenSocket* listen_socket, |
void EventHandlerImplementation::HandleClosed(Handle* handle) { |
- if (!handle->is_closing()) { |
+ if (!handle->IsClosing()) { |
int event_mask = 1 << kCloseEvent; |
if ((handle->mask() & event_mask) != 0) { |
Dart_PostIntArray(handle->port(), 1, &event_mask); |
@@ -650,49 +650,49 @@ void EventHandlerImplementation::HandleClosed(Handle* handle) { |
} |
-void EventHandlerImplementation::HandleRead(ClientSocket* client_socket, |
+void EventHandlerImplementation::HandleRead(Handle* handle, |
int bytes, |
IOBuffer* buffer) { |
buffer->set_data_length(bytes); |
- client_socket->ReadComplete(buffer); |
+ handle->ReadComplete(buffer); |
if (bytes > 0) { |
- if (!client_socket->is_closing()) { |
+ if (!handle->IsClosing()) { |
int event_mask = 1 << kInEvent; |
- if ((client_socket->mask() & event_mask) != 0) { |
- Dart_PostIntArray(client_socket->port(), 1, &event_mask); |
+ if ((handle->mask() & event_mask) != 0) { |
+ Dart_PostIntArray(handle->port(), 1, &event_mask); |
} |
} |
} else { |
ASSERT(bytes == 0); |
- client_socket->MarkClosedRead(); |
- HandleClosed(client_socket); |
+ handle->MarkClosedRead(); |
+ HandleClosed(handle); |
} |
- if (client_socket->IsClosed()) { |
- delete client_socket; |
+ if (handle->IsClosed()) { |
+ delete handle; |
} |
} |
-void EventHandlerImplementation::HandleWrite(ClientSocket* client_socket, |
+void EventHandlerImplementation::HandleWrite(Handle* handle, |
int bytes, |
IOBuffer* buffer) { |
- client_socket->WriteComplete(buffer); |
+ handle->WriteComplete(buffer); |
if (bytes > 0) { |
- if (!client_socket->is_closing()) { |
+ if (!handle->IsClosing()) { |
int event_mask = 1 << kOutEvent; |
- if ((client_socket->mask() & event_mask) != 0) { |
- Dart_PostIntArray(client_socket->port(), 1, &event_mask); |
+ if ((handle->mask() & event_mask) != 0) { |
+ Dart_PostIntArray(handle->port(), 1, &event_mask); |
} |
} |
} else { |
ASSERT(bytes == 0); |
- HandleClosed(client_socket); |
+ HandleClosed(handle); |
} |
- if (client_socket->IsClosed()) { |
- delete client_socket; |
+ if (handle->IsClosed()) { |
+ delete handle; |
} |
} |
@@ -716,13 +716,13 @@ void EventHandlerImplementation::HandleIOCompletion(DWORD bytes, |
break; |
} |
case IOBuffer::kRead: { |
- ClientSocket* client_socket = reinterpret_cast<ClientSocket*>(key); |
- HandleRead(client_socket, bytes, buffer); |
+ Handle* handle = reinterpret_cast<Handle*>(key); |
+ HandleRead(handle, bytes, buffer); |
break; |
} |
case IOBuffer::kWrite: { |
- ClientSocket* client_socket = reinterpret_cast<ClientSocket*>(key); |
- HandleWrite(client_socket, bytes, buffer); |
+ Handle* handle = reinterpret_cast<Handle*>(key); |
+ HandleWrite(handle, bytes, buffer); |
break; |
} |
default: |