summaryrefslogtreecommitdiffstats
path: root/base/threading
diff options
context:
space:
mode:
authorskyostil <skyostil@chromium.org>2015-06-11 10:22:55 -0700
committerCommit bot <commit-bot@chromium.org>2015-06-11 17:23:36 +0000
commitcef9c5b3204a9271965efaebe153b2ee139108fa (patch)
tree11f1377e68eb635e290ed3e82997a7e0a6ba7904 /base/threading
parent90302c61a1e60c6da3a83759b2f4e55e4ee6ecf6 (diff)
downloadchromium_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.h2
-rw-r--r--base/threading/thread_unittest.cc6
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());
+}