Define MessagePumpDefault and use it to implement MessageLoop on non-Windows
platforms. This is actually just a first-step toward the real fix which is to
use MessagePumpDefault on all platforms on non-UI and non-IO threads.
This CL also fixes some GCC compilation errors. I renamed MessageLoopOwnable
to TaskBase, which seems more appropriate since a MessageLoopOwnable has a
next Task pointer and clearly is only meaningful in the context of Task. (I
wonder why it is even a separate class, but that is another issue.) I had to
make the next_task / set_next_task methods public since they are used by an
inner class of MessageLoop. Perhaps those inner classes should be made into
top-level classes, but that seemed like too much to change at this time.
R=jar,mmentovai
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1045 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/base/message_loop.cc b/base/message_loop.cc
index 4d61b6a..c82c3ee6 100644
--- a/base/message_loop.cc
+++ b/base/message_loop.cc
@@ -32,6 +32,7 @@
#include <algorithm>
#include "base/logging.h"
+#include "base/message_pump_default.h"
#include "base/string_util.h"
#include "base/thread_local_storage.h"
@@ -79,14 +80,17 @@
MessageLoop::MessageLoop()
#pragma warning(suppress: 4355) // OK, to use |this| in the initializer list.
: timer_manager_(this),
- exception_restoration_(false),
nestable_tasks_allowed_(true),
+ exception_restoration_(false),
state_(NULL) {
DCHECK(tls_index_) << "static initializer failed";
DCHECK(!current()) << "should only have one message loop per thread";
ThreadLocalStorage::Set(tls_index_, this);
+ // TODO(darin): Generalize this to support instantiating different pumps.
#if defined(OS_WIN)
pump_ = new base::MessagePumpWin();
+#else
+ pump_ = new base::MessagePumpDefault();
#endif
}
@@ -453,7 +457,7 @@
bool MessageLoop::PrioritizedTaskQueue::PrioritizedTask::operator < (
PrioritizedTask const & right) const {
- int compare = task_->priority_ - right.task_->priority_;
+ int compare = task_->priority() - right.task_->priority();
if (compare)
return compare < 0;
// Don't compare directly, but rather subtract. This handles overflow