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

Unified Diff: mojo/public/cpp/utility/lib/run_loop.cc

Issue 588593002: mojo: Allow basic RunLoop to be quit from a posted task. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Follow review Created 6 years, 3 months 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 | mojo/public/cpp/utility/run_loop.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/public/cpp/utility/lib/run_loop.cc
diff --git a/mojo/public/cpp/utility/lib/run_loop.cc b/mojo/public/cpp/utility/lib/run_loop.cc
index b06880dc9d6e0a1dbd02aaeb1cb105a9a39bad54..0ec8c23b0efac99b7f570b575a1d065150aeec4f 100644
--- a/mojo/public/cpp/utility/lib/run_loop.cc
+++ b/mojo/public/cpp/utility/lib/run_loop.cc
@@ -93,25 +93,26 @@ bool RunLoop::HasHandler(const Handle& handle) const {
}
void RunLoop::Run() {
- assert(current() == this);
- RunState* old_state = run_state_;
- RunState run_state;
- run_state_ = &run_state;
- while (!run_state.should_quit) {
- DoDelayedWork();
- Wait(false);
- }
- run_state_ = old_state;
+ RunInternal(false);
}
void RunLoop::RunUntilIdle() {
+ RunInternal(true);
+}
+
+void RunLoop::RunInternal(bool until_idle) {
assert(current() == this);
RunState* old_state = run_state_;
RunState run_state;
run_state_ = &run_state;
- while (!run_state.should_quit) {
+ for (;;) {
DoDelayedWork();
- if (!Wait(true) && delayed_tasks_.empty())
+ if (run_state.should_quit)
+ break;
+ bool did_notify = Wait(until_idle);
+ if (run_state.should_quit)
+ break;
+ if (!did_notify && until_idle && delayed_tasks_.empty())
jamesr 2014/09/24 04:23:10 RunUntilIdle does not mean run until the delayed t
break;
}
run_state_ = old_state;
@@ -240,7 +241,7 @@ RunLoop::WaitState RunLoop::GetWaitState(bool non_blocking) const {
else
min_time = std::min(min_time, delayed_min_time);
}
- if (non_blocking) {
+ if (non_blocking && delayed_tasks_.empty()) {
wait_state.deadline = static_cast<MojoDeadline>(0);
} else if (min_time != kInvalidTimeTicks) {
const MojoTimeTicks now = GetTimeTicksNow();
« no previous file with comments | « no previous file | mojo/public/cpp/utility/run_loop.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698