diff options
author | skyostil <skyostil@chromium.org> | 2015-06-11 10:22:55 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-11 17:23:36 +0000 |
commit | cef9c5b3204a9271965efaebe153b2ee139108fa (patch) | |
tree | 11f1377e68eb635e290ed3e82997a7e0a6ba7904 /base/threading | |
parent | 90302c61a1e60c6da3a83759b2f4e55e4ee6ecf6 (diff) | |
download | chromium_src-cef9c5b3204a9271965efaebe153b2ee139108fa.zip chromium_src-cef9c5b3204a9271965efaebe153b2ee139108fa.tar.gz chromium_src-cef9c5b3204a9271965efaebe153b2ee139108fa.tar.bz2 |
base: Don't crash in Thread::task_runner() if the thread isn't running
Thread::task_runner() says that it will return a null task runner if the
thread isn't running (similarly as message_loop_proxy()), but before
this patch the code would just deference a null pointer instead.
BUG=465354
Review URL: https://codereview.chromium.org/1182463003
Cr-Commit-Position: refs/heads/master@{#333973}
Diffstat (limited to 'base/threading')
-rw-r--r-- | base/threading/thread.h | 2 | ||||
-rw-r--r-- | base/threading/thread_unittest.cc | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/base/threading/thread.h b/base/threading/thread.h index 0bd5d12..6b70058 100644 --- a/base/threading/thread.h +++ b/base/threading/thread.h @@ -173,7 +173,7 @@ class BASE_EXPORT Thread : PlatformThread::Delegate { // hold on to this even after the thread is gone; in this situation, attempts // to PostTask() will fail. scoped_refptr<SingleThreadTaskRunner> task_runner() const { - return message_loop_->task_runner(); + return message_loop_ ? message_loop_->task_runner() : nullptr; } // Returns the name of this thread (for display in debugger too). diff --git a/base/threading/thread_unittest.cc b/base/threading/thread_unittest.cc index e86c758..926d5dd 100644 --- a/base/threading/thread_unittest.cc +++ b/base/threading/thread_unittest.cc @@ -234,3 +234,9 @@ TEST_F(ThreadTest, CleanUp) { EXPECT_EQ(THREAD_EVENT_CLEANUP, captured_events[1]); EXPECT_EQ(THREAD_EVENT_MESSAGE_LOOP_DESTROYED, captured_events[2]); } + +TEST_F(ThreadTest, ThreadNotStarted) { + Thread a("Inert"); + EXPECT_EQ(nullptr, a.message_loop_proxy()); + EXPECT_EQ(nullptr, a.task_runner()); +} |