| Index: message_loop/message_pump_libevent.cc
|
| diff --git a/message_loop/message_pump_libevent.cc b/message_loop/message_pump_libevent.cc
|
| index 74602a7b3204357e84ac1c8c40abaa4325f37398..b24a10974cd716738484353a0fbaafb56d2376a4 100644
|
| --- a/message_loop/message_pump_libevent.cc
|
| +++ b/message_loop/message_pump_libevent.cc
|
| @@ -119,7 +119,8 @@ MessagePumpLibevent::MessagePumpLibevent()
|
| processed_io_events_(false),
|
| event_base_(event_base_new()),
|
| wakeup_pipe_in_(-1),
|
| - wakeup_pipe_out_(-1) {
|
| + wakeup_pipe_out_(-1),
|
| + event_source_(nullptr) {
|
| if (!Init())
|
| NOTREACHED();
|
| }
|
| @@ -214,6 +215,16 @@ void MessagePumpLibevent::RemoveIOObserver(IOObserver *obs) {
|
| io_observers_.RemoveObserver(obs);
|
| }
|
|
|
| +void MessagePumpLibevent::SetEventSource(EventSource* event_source) {
|
| + DCHECK(event_source);
|
| + DCHECK(!event_source_ || event_source_ == event_source);
|
| + event_source_ = event_source;
|
| +}
|
| +
|
| +void MessagePumpLibevent::ClearEventSource() {
|
| + event_source_ = nullptr;
|
| +}
|
| +
|
| // Tell libevent to break out of inner loop.
|
| static void timer_callback(int fd, short events, void *context)
|
| {
|
| @@ -238,6 +249,10 @@ void MessagePumpLibevent::Run(Delegate* delegate) {
|
| if (!keep_running_)
|
| break;
|
|
|
| + did_work |= PollEventSource();
|
| + if (!keep_running_)
|
| + break;
|
| +
|
| event_base_loop(event_base_, EVLOOP_NONBLOCK);
|
| did_work |= processed_io_events_;
|
| processed_io_events_ = false;
|
| @@ -316,6 +331,10 @@ void MessagePumpLibevent::DidProcessIOEvent() {
|
| FOR_EACH_OBSERVER(IOObserver, io_observers_, DidProcessIOEvent());
|
| }
|
|
|
| +bool MessagePumpLibevent::PollEventSource() {
|
| + return event_source_ && event_source_->Poll();
|
| +}
|
| +
|
| bool MessagePumpLibevent::Init() {
|
| int fds[2];
|
| if (pipe(fds)) {
|
|
|