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

Unified Diff: base/message_pump_libevent.cc

Issue 14068: Reverting 6911. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 years 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 | « base/message_pump_libevent.h ('k') | chrome/common/ipc_channel_posix.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/message_pump_libevent.cc
===================================================================
--- base/message_pump_libevent.cc (revision 6915)
+++ base/message_pump_libevent.cc (working copy)
@@ -15,48 +15,17 @@
// Return 0 on success
// Too small a function to bother putting in a library?
-static int SetNonBlocking(int fd) {
- int flags = fcntl(fd, F_GETFL, 0);
- if (flags == -1)
- flags = 0;
- return fcntl(fd, F_SETFL, flags | O_NONBLOCK);
+static int SetNonBlocking(int fd)
+{
+ int flags = fcntl(fd, F_GETFL, 0);
+ if (-1 == flags)
+ flags = 0;
+ return fcntl(fd, F_SETFL, flags | O_NONBLOCK);
}
-MessagePumpLibevent::FileDescriptorWatcher::FileDescriptorWatcher()
- : is_persistent_(false),
- event_(NULL) {
-}
-
-MessagePumpLibevent::FileDescriptorWatcher::~FileDescriptorWatcher() {
- if (event_.get()) {
- StopWatchingFileDescriptor();
- }
-}
-
-void MessagePumpLibevent::FileDescriptorWatcher::Init(event *e,
- bool is_persistent) {
- DCHECK(e);
-
- // Cleanup any old event we might have been watching.
- if (event_.get()) {
- StopWatchingFileDescriptor();
- }
-
- is_persistent = is_persistent_;
- event_.reset(e);
-}
-
-bool MessagePumpLibevent::FileDescriptorWatcher::StopWatchingFileDescriptor() {
- if (event_.get() == NULL) {
- return true;
- }
-
- // event_del() is a no-op of the event isn't active.
- return (event_del(event_.get()) == 0);
-}
-
// Called if a byte is received on the wakeup pipe.
void MessagePumpLibevent::OnWakeup(int socket, short flags, void* context) {
+
base::MessagePumpLibevent* that =
static_cast<base::MessagePumpLibevent*>(context);
DCHECK(that->wakeup_pipe_out_ == socket);
@@ -92,7 +61,7 @@
wakeup_event_ = new event;
event_set(wakeup_event_, wakeup_pipe_out_, EV_READ | EV_PERSIST,
- OnWakeup, this);
+ OnWakeup, this);
event_base_set(event_base_, wakeup_event_);
if (event_add(wakeup_event_, 0))
@@ -108,58 +77,69 @@
event_base_free(event_base_);
}
-bool MessagePumpLibevent::WatchFileDescriptor(int fd,
- bool persistent,
- Mode mode,
- FileDescriptorWatcher *controller,
- Watcher *delegate) {
- DCHECK(fd > 0);
- DCHECK(controller);
- DCHECK(delegate);
- DCHECK(mode == WATCH_READ || mode == WATCH_WRITE || mode == WATCH_READ_WRITE);
+void MessagePumpLibevent::WatchSocket(int socket, short interest_mask,
+ event* e, Watcher* watcher) {
- int event_mask = persistent ? EV_PERSIST : 0;
- if (mode == WATCH_READ || mode == WATCH_READ_WRITE) {
- event_mask |= EV_READ;
- }
- if (mode == WATCH_WRITE || mode == WATCH_READ_WRITE) {
- event_mask |= EV_WRITE;
- }
+ // Set current interest mask and message pump for this event
+ event_set(e, socket, interest_mask, OnReadinessNotification, watcher);
- // Ownership is transferred to the controller.
- scoped_ptr<event> evt(new event);
- // Set current interest mask and message pump for this event.
- event_set(evt.get(), fd, event_mask | EV_READ, OnLibeventNotification,
- delegate);
-
// Tell libevent which message pump this socket will belong to when we add it.
- if (event_base_set(event_base_, evt.get()) != 0) {
- return false;
- }
+ event_base_set(event_base_, e);
// Add this socket to the list of monitored sockets.
- if (event_add(evt.get(), NULL) != 0) {
- return false;
+ if (event_add(e, NULL))
+ NOTREACHED();
+}
+
+void MessagePumpLibevent::WatchFileHandle(int fd, short interest_mask,
+ event* e, FileWatcher* watcher) {
+ // Set current interest mask and message pump for this event
+ if ((interest_mask & EV_READ) != 0) {
+ event_set(e, fd, interest_mask, OnFileReadReadinessNotification, watcher);
+ } else {
+ event_set(e, fd, interest_mask, OnFileWriteReadinessNotification, watcher);
}
- // Transfer ownership of e to controller.
- controller->Init(evt.release(), persistent);
- return true;
+ // Tell libevent which message pump this fd will belong to when we add it.
+ event_base_set(event_base_, e);
+
+ // Add this fd to the list of monitored sockets.
+ if (event_add(e, NULL))
+ NOTREACHED();
}
+void MessagePumpLibevent::UnwatchSocket(event* e) {
+ // Remove this socket from the list of monitored sockets.
+ if (event_del(e))
+ NOTREACHED();
+}
-void MessagePumpLibevent::OnLibeventNotification(int fd, short flags,
- void* context) {
+void MessagePumpLibevent::UnwatchFileHandle(event* e) {
+ // Remove this fd from the list of monitored fds.
+ if (event_del(e))
+ NOTREACHED();
+}
+
+void MessagePumpLibevent::OnReadinessNotification(int socket, short flags,
+ void* context) {
+ // The given socket is ready for I/O.
+ // Tell the owner what kind of I/O the socket is ready for.
Watcher* watcher = static_cast<Watcher*>(context);
+ watcher->OnSocketReady(flags);
+}
- if (flags & EV_WRITE) {
- watcher->OnFileCanWriteWithoutBlocking(fd);
- }
- if (flags & EV_READ) {
- watcher->OnFileCanReadWithoutBlocking(fd);
- }
+void MessagePumpLibevent::OnFileReadReadinessNotification(int fd, short flags,
+ void* context) {
+ FileWatcher* watcher = static_cast<FileWatcher*>(context);
+ watcher->OnFileReadReady(fd);
}
+void MessagePumpLibevent::OnFileWriteReadinessNotification(int fd, short flags,
+ void* context) {
+ FileWatcher* watcher = static_cast<FileWatcher*>(context);
+ watcher->OnFileWriteReady(fd);
+}
+
// Reentrant!
void MessagePumpLibevent::Run(Delegate* delegate) {
DCHECK(keep_running_) << "Quit must have been called outside of Run!";
« no previous file with comments | « base/message_pump_libevent.h ('k') | chrome/common/ipc_channel_posix.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698