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

Unified Diff: runtime/bin/eventhandler_linux.h

Issue 8437090: Change the handling of closing sockets (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments by 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 | « runtime/bin/eventhandler.h ('k') | runtime/bin/eventhandler_linux.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/eventhandler_linux.h
diff --git a/runtime/bin/eventhandler_linux.h b/runtime/bin/eventhandler_linux.h
index c1eb1e125b4cb1cb57f9f2c2ae20f6f34bbf2a74..9d6172a3cc2ba23c1e7faf7f2a3c9e0717c3c74e 100644
--- a/runtime/bin/eventhandler_linux.h
+++ b/runtime/bin/eventhandler_linux.h
@@ -5,6 +5,9 @@
#ifndef BIN_EVENTHANDLER_LINUX_H_
#define BIN_EVENTHANDLER_LINUX_H_
+#include <unistd.h>
+#include <sys/socket.h>
+
class InterruptMessage {
public:
@@ -14,19 +17,62 @@ class InterruptMessage {
};
+enum PortDataFlags {
+ kClosedRead = 0,
+ kClosedWrite = 1,
+};
+
+
class SocketData {
public:
- void FillPollEvents(struct pollfd* pollfds);
- bool IsListeningSocket() { return (_mask & (1 << kListeningSocket)) != 0; }
+ intptr_t GetPollEvents();
+
+ void Unregister() {
+ port_ = 0;
+ mask_ = 0;
+ }
+
+ void ShutdownRead() {
+ shutdown(fd_, SHUT_RD);
+ MarkClosedRead();
+ }
+
+ void ShutdownWrite() {
+ shutdown(fd_, SHUT_WR);
+ MarkClosedWrite();
+ }
+
+ void Close() {
+ Unregister();
+ flags_ = 0;
+ close(fd_);
+ fd_ = 0;
+ }
+
+ bool IsListeningSocket() { return (mask_ & (1 << kListeningSocket)) != 0; }
+ bool IsClosedRead() { return (flags_ & (1 << kClosedRead)) != 0; }
+ bool IsClosedWrite() { return (flags_ & (1 << kClosedWrite)) != 0; }
+
+ void MarkClosedRead() { flags_ |= (1 << kClosedRead); }
+ void MarkClosedWrite() { flags_ |= (1 << kClosedWrite); }
+
+ bool HasPollEvents() { return mask_ != 0; }
+
+ void SetPortAndMask(Dart_Port port, intptr_t mask) {
+ port_ = port;
+ mask_ = mask;
+ }
- Dart_Port port() { return _port; }
- void set_port(Dart_Port port) { _port = port; }
- intptr_t mask() { return _mask; }
- void set_mask(intptr_t mask) { _mask = mask; }
+ intptr_t fd() { return fd_; }
+ void set_fd(intptr_t fd) { fd_ = fd; }
+ Dart_Port port() { return port_; }
+ intptr_t mask() { return mask_; }
private:
- Dart_Port _port;
- intptr_t _mask;
+ intptr_t fd_;
+ Dart_Port port_;
+ intptr_t mask_;
+ intptr_t flags_;
};
@@ -43,10 +89,6 @@ class EventHandlerImplementation {
intptr_t GetTimeout();
bool GetInterruptMessage(InterruptMessage* msg);
struct pollfd* GetPollFds(intptr_t* size);
- void RegisterFdWakeup(intptr_t id, Dart_Port dart_port, intptr_t data);
- void UnregisterFdWakeup(intptr_t id);
- void CloseFd(intptr_t id);
- void UnregisterFd(intptr_t id);
void HandleEvents(struct pollfd* pollfds, int pollfds_size, int result_size);
void HandleTimeout();
static void* Poll(void* args);
@@ -56,7 +98,6 @@ class EventHandlerImplementation {
intptr_t GetPollEvents(struct pollfd* pollfd);
SocketData* socket_map_;
- intptr_t socket_map_entries_;
intptr_t socket_map_size_;
int64_t timeout_; // Time for next timeout.
Dart_Port timeout_port_;
« no previous file with comments | « runtime/bin/eventhandler.h ('k') | runtime/bin/eventhandler_linux.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698