diff options
author | tim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-07 00:57:43 +0000 |
---|---|---|
committer | tim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-07 00:57:43 +0000 |
commit | 210dd189849a69aaa494333b5dbf8adb53fca5f3 (patch) | |
tree | e97ffdd816d40f5d652c2e93ccec053de8aeb500 /chrome | |
parent | aba3560d2cef624a8ad395368c7659fee8405989 (diff) | |
download | chromium_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.cc | 36 | ||||
-rw-r--r-- | chrome/browser/sync/notifier/chrome_system_resources.h | 4 |
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. |