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

Unified Diff: runtime/bin/eventhandler_win.h

Issue 8503006: Fix handling of async IO from pipes on Windows (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments from ager@ Created 9 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | runtime/bin/eventhandler_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/eventhandler_win.h
diff --git a/runtime/bin/eventhandler_win.h b/runtime/bin/eventhandler_win.h
index 619a65a4ed53a479972129ff73d0bbd4fdf5d764..83003845016b72ebf84b71ec8ff8b2c7f72df7c3 100644
--- a/runtime/bin/eventhandler_win.h
+++ b/runtime/bin/eventhandler_win.h
@@ -152,6 +152,13 @@ class Handle {
void ReadComplete(IOBuffer* buffer);
void WriteComplete(IOBuffer* buffer);
+ bool IsClosing() { return (flags_ & (1 << kClosing)) != 0; }
+ bool IsClosedRead() { return (flags_ & (1 << kCloseRead)) != 0; }
+ bool IsClosedWrite() { return (flags_ & (1 << kCloseWrite)) != 0; }
+ void MarkClosing() { flags_ |= (1 << kClosing); }
+ void MarkClosedRead() { flags_ |= (1 << kCloseRead); }
+ void MarkClosedWrite() { flags_ |= (1 << kCloseWrite); }
+
virtual void EnsureInitialized(
EventHandlerImplementation* event_handler) = 0;
@@ -178,9 +185,13 @@ class Handle {
bool is_client_socket() { return type_ == kClientSocket; }
intptr_t mask() { return mask_; }
- bool is_closing() { return closing_; }
-
protected:
+ enum Flags {
+ kClosing = 0,
+ kCloseRead = 1,
+ kCloseWrite = 2
+ };
+
explicit Handle(HANDLE handle);
Handle(HANDLE handle, Dart_Port port);
@@ -188,16 +199,18 @@ class Handle {
Type type_;
HANDLE handle_;
- bool closing_; // Is this handle in the process of closing?
Dart_Port port_; // Dart port to communicate events for this socket.
intptr_t mask_; // Mask of events to report through the port.
HANDLE completion_port_;
- CRITICAL_SECTION cs_; // Critical section protecting this object.
EventHandlerImplementation* event_handler_;
IOBuffer* data_ready_; // IO buffer for data ready to be read.
IOBuffer* pending_read_; // IO buffer for pending read.
IOBuffer* pending_write_; // IO buffer for pending write
+
+ private:
+ int flags_;
+ CRITICAL_SECTION cs_; // Critical section protecting this object.
};
@@ -273,15 +286,13 @@ class ListenSocket : public SocketHandle {
// Information on connected sockets.
class ClientSocket : public SocketHandle {
public:
- explicit ClientSocket(SOCKET s)
- : SocketHandle(s),
- next_(NULL),
- flags_(0) { type_ = kClientSocket; }
+ explicit ClientSocket(SOCKET s) : SocketHandle(s), next_(NULL) {
+ type_ = kClientSocket;
+ }
- ClientSocket(SOCKET s, Dart_Port port)
- : SocketHandle(s, port),
- next_(NULL),
- flags_(0) { type_ = kClientSocket; }
+ ClientSocket(SOCKET s, Dart_Port port) : SocketHandle(s, port), next_(NULL) {
+ type_ = kClientSocket;
+ }
virtual ~ClientSocket() {
// Don't delete this object until all pending requests have been handled.
@@ -291,11 +302,6 @@ class ClientSocket : public SocketHandle {
};
void Shutdown(int how);
- bool IsClosedRead() { return (flags_ & (1 << kCloseRead)) != 0; }
- bool IsClosedWrite() { return (flags_ & (1 << kCloseWrite)) != 0; }
-
- void MarkClosedRead() { flags_ |= (1 << kCloseRead); }
- void MarkClosedWrite() { flags_ |= (1 << kCloseWrite); }
// Internal interface used by the event handler.
virtual bool IssueRead();
@@ -309,15 +315,9 @@ class ClientSocket : public SocketHandle {
void set_next(ClientSocket* next) { next_ = next; }
private:
- enum Flags {
- kCloseRead = 0,
- kCloseWrite = 1
- };
-
virtual void AfterClose();
ClientSocket* next_;
- int flags_;
};
@@ -335,8 +335,8 @@ class EventHandlerImplementation {
void HandleTimeout();
void HandleAccept(ListenSocket* listen_socket, IOBuffer* buffer);
void HandleClosed(Handle* handle);
- void HandleRead(ClientSocket* client_socket, int bytes, IOBuffer* buffer);
- void HandleWrite(ClientSocket* client_socket, int bytes, IOBuffer* buffer);
+ void HandleRead(Handle* handle, int bytes, IOBuffer* buffer);
+ void HandleWrite(Handle* handle, int bytes, IOBuffer* buffer);
void HandleClose(ClientSocket* client_socket);
void HandleIOCompletion(DWORD bytes, ULONG_PTR key, OVERLAPPED* overlapped);
« no previous file with comments | « no previous file | runtime/bin/eventhandler_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698