summaryrefslogtreecommitdiffstats
path: root/base/message_pump_libevent.cc
diff options
context:
space:
mode:
authorwtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-30 15:39:21 +0000
committerwtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-30 15:39:21 +0000
commit81aa9e1c829dfc8058b665d7c13106b5b1bd8fcf (patch)
tree840e14909be7183ed2ce6664dd0bc47cd36905eb /base/message_pump_libevent.cc
parentc2610f7883a30763fcd0d1c4863967cc00dcc905 (diff)
downloadchromium_src-81aa9e1c829dfc8058b665d7c13106b5b1bd8fcf.zip
chromium_src-81aa9e1c829dfc8058b665d7c13106b5b1bd8fcf.tar.gz
chromium_src-81aa9e1c829dfc8058b665d7c13106b5b1bd8fcf.tar.bz2
Change MessagePumpLibevent::Run to process I/O events before doing idle
work. R=agl@chromium.org,jar@chromium.org,mark@chromium.org,rvargas@chromium.org BUG=87707 TEST=covered by existing unit tests Review URL: http://codereview.chromium.org/7262011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@91137 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/message_pump_libevent.cc')
-rw-r--r--base/message_pump_libevent.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/base/message_pump_libevent.cc b/base/message_pump_libevent.cc
index 24eba1e..e5e5652 100644
--- a/base/message_pump_libevent.cc
+++ b/base/message_pump_libevent.cc
@@ -107,6 +107,7 @@ void MessagePumpLibevent::FileDescriptorWatcher::OnFileCanWriteWithoutBlocking(
MessagePumpLibevent::MessagePumpLibevent()
: keep_running_(true),
in_run_(false),
+ processed_io_events_(false),
event_base_(event_base_new()),
wakeup_pipe_in_(-1),
wakeup_pipe_out_(-1) {
@@ -226,6 +227,10 @@ void MessagePumpLibevent::Run(Delegate* delegate) {
if (!keep_running_)
break;
+ event_base_loop(event_base_, EVLOOP_NONBLOCK);
+ did_work |= processed_io_events_;
+ processed_io_events_ = false;
+
did_work |= delegate->DoDelayedWork(&delayed_work_time_);
if (!keep_running_)
break;
@@ -295,6 +300,7 @@ void MessagePumpLibevent::WillProcessIOEvent() {
void MessagePumpLibevent::DidProcessIOEvent() {
FOR_EACH_OBSERVER(IOObserver, io_observers_, DidProcessIOEvent());
+ processed_io_events_ = true;
}
bool MessagePumpLibevent::Init() {