summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authortim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-07 00:57:43 +0000
committertim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-07 00:57:43 +0000
commit210dd189849a69aaa494333b5dbf8adb53fca5f3 (patch)
treee97ffdd816d40f5d652c2e93ccec053de8aeb500 /chrome
parentaba3560d2cef624a8ad395368c7659fee8405989 (diff)
downloadchromium_src-210dd189849a69aaa494333b5dbf8adb53fca5f3.zip
chromium_src-210dd189849a69aaa494333b5dbf8adb53fca5f3.tar.gz
chromium_src-210dd189849a69aaa494333b5dbf8adb53fca5f3.tar.bz2
sync: more debugging for crash in ChromeSystemResources
BUG=64652 TEST=none Review URL: http://codereview.chromium.org/5517004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@68422 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/sync/notifier/chrome_system_resources.cc36
-rw-r--r--chrome/browser/sync/notifier/chrome_system_resources.h4
2 files changed, 28 insertions, 12 deletions
diff --git a/chrome/browser/sync/notifier/chrome_system_resources.cc b/chrome/browser/sync/notifier/chrome_system_resources.cc
index 46090e1..c7173ec 100644
--- a/chrome/browser/sync/notifier/chrome_system_resources.cc
+++ b/chrome/browser/sync/notifier/chrome_system_resources.cc
@@ -17,29 +17,35 @@
namespace sync_notifier {
ChromeSystemResources::ChromeSystemResources(StateWriter* state_writer)
- : state_writer_(state_writer) {
- CHECK(non_thread_safe_.CalledOnValidThread());
+ : state_writer_(state_writer),
+ created_on_loop_(MessageLoop::current()) {
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ CHECK(created_on_loop_);
DCHECK(state_writer_);
}
ChromeSystemResources::~ChromeSystemResources() {
- CHECK(non_thread_safe_.CalledOnValidThread());
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ CHECK_EQ(created_on_loop_, MessageLoop::current());
StopScheduler();
}
invalidation::Time ChromeSystemResources::current_time() {
- CHECK(non_thread_safe_.CalledOnValidThread());
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ CHECK_EQ(created_on_loop_, MessageLoop::current());
return base::Time::Now();
}
void ChromeSystemResources::StartScheduler() {
- CHECK(non_thread_safe_.CalledOnValidThread());
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ CHECK_EQ(created_on_loop_, MessageLoop::current());
scoped_runnable_method_factory_.reset(
new ScopedRunnableMethodFactory<ChromeSystemResources>(this));
}
void ChromeSystemResources::StopScheduler() {
- CHECK(non_thread_safe_.CalledOnValidThread());
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ CHECK_EQ(created_on_loop_, MessageLoop::current());
scoped_runnable_method_factory_.reset();
STLDeleteElements(&posted_tasks_);
}
@@ -47,7 +53,8 @@ void ChromeSystemResources::StopScheduler() {
void ChromeSystemResources::ScheduleWithDelay(
invalidation::TimeDelta delay,
invalidation::Closure* task) {
- CHECK(non_thread_safe_.CalledOnValidThread());
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ CHECK_EQ(created_on_loop_, MessageLoop::current());
Task* task_to_post = MakeTaskToPost(task);
if (!task_to_post) {
return;
@@ -58,7 +65,8 @@ void ChromeSystemResources::ScheduleWithDelay(
void ChromeSystemResources::ScheduleImmediately(
invalidation::Closure* task) {
- CHECK(non_thread_safe_.CalledOnValidThread());
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ CHECK_EQ(created_on_loop_, MessageLoop::current());
Task* task_to_post = MakeTaskToPost(task);
if (!task_to_post) {
return;
@@ -70,14 +78,16 @@ void ChromeSystemResources::ScheduleImmediately(
// notifications thread).
void ChromeSystemResources::ScheduleOnListenerThread(
invalidation::Closure* task) {
- CHECK(non_thread_safe_.CalledOnValidThread());
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ CHECK_EQ(created_on_loop_, MessageLoop::current());
ScheduleImmediately(task);
}
// 'Internal thread' means 'not the listener thread'. Since the
// listener thread is the notifications thread, always return false.
bool ChromeSystemResources::IsRunningOnInternalThread() {
- CHECK(non_thread_safe_.CalledOnValidThread());
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ CHECK_EQ(created_on_loop_, MessageLoop::current());
return false;
}
@@ -134,8 +144,9 @@ void ChromeSystemResources::WriteState(
Task* ChromeSystemResources::MakeTaskToPost(
invalidation::Closure* task) {
- CHECK(non_thread_safe_.CalledOnValidThread());
+ DCHECK(non_thread_safe_.CalledOnValidThread());
DCHECK(invalidation::IsCallbackRepeatable(task));
+ CHECK_EQ(created_on_loop_, MessageLoop::current());
if (!scoped_runnable_method_factory_.get()) {
delete task;
return NULL;
@@ -148,7 +159,8 @@ Task* ChromeSystemResources::MakeTaskToPost(
}
void ChromeSystemResources::RunPostedTask(invalidation::Closure* task) {
- CHECK(non_thread_safe_.CalledOnValidThread());
+ DCHECK(non_thread_safe_.CalledOnValidThread());
+ CHECK_EQ(created_on_loop_, MessageLoop::current());
RunAndDeleteClosure(task);
posted_tasks_.erase(task);
}
diff --git a/chrome/browser/sync/notifier/chrome_system_resources.h b/chrome/browser/sync/notifier/chrome_system_resources.h
index 2248aae..b6e6256 100644
--- a/chrome/browser/sync/notifier/chrome_system_resources.h
+++ b/chrome/browser/sync/notifier/chrome_system_resources.h
@@ -13,6 +13,7 @@
#include <set>
#include <string>
+#include "base/message_loop.h"
#include "base/non_thread_safe.h"
#include "base/scoped_ptr.h"
#include "base/task.h"
@@ -58,6 +59,9 @@ class ChromeSystemResources : public invalidation::SystemResources {
std::set<invalidation::Closure*> posted_tasks_;
StateWriter* state_writer_;
+ // TODO(tim): Trying to debug bug crbug.com/64652.
+ const MessageLoop* created_on_loop_;
+
// If the scheduler has been started, inserts |task| into
// |posted_tasks_| and returns a Task* to post. Otherwise,
// immediately deletes |task| and returns NULL.