Chromium Code Reviews| Index: base/threading/simple_thread_unittest.cc |
| diff --git a/base/threading/simple_thread_unittest.cc b/base/threading/simple_thread_unittest.cc |
| index 26e3a907bc7b5faed77525e59f0a758fabc0472f..8b197a89238f728d7d83f1e1986b9d3f7f9982d8 100644 |
| --- a/base/threading/simple_thread_unittest.cc |
| +++ b/base/threading/simple_thread_unittest.cc |
| @@ -5,6 +5,7 @@ |
| #include <memory> |
| #include "base/atomic_sequence_num.h" |
| +#include "base/debug/leak_annotations.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "base/synchronization/waitable_event.h" |
| #include "base/test/gtest_util.h" |
| @@ -146,23 +147,34 @@ TEST(SimpleThreadTest, NamedWithOptions) { |
| std::string("event_waiter/") + IntToString(thread.tid())); |
| } |
| -TEST(SimpleThreadTest, JoinNonJoinableThreadDeath) { |
| +TEST(SimpleThreadTest, StartNonJoinableThreadAndDieOnJoin) { |
| SleepRunner runner; |
|
sdefresne
2016/08/05 16:48:33
I think SleepRunner also needs to be leaked as Del
gab
2016/08/05 17:28:33
Good point, for DelegateSimpleThread, the Delegate
|
| + |
| SimpleThread::Options options; |
| options.joinable = false; |
| - DelegateSimpleThread thread(&runner, "noop_runner", options); |
| + DelegateSimpleThread* thread = |
| + new DelegateSimpleThread(&runner, "noop_runner", options); |
| + // Non-joinable SimpleThreads have to be leaked. |
| + ANNOTATE_LEAKING_OBJECT_PTR(thread); |
| - thread.Start(); |
| - EXPECT_DCHECK_DEATH(thread.Join()); |
| + EXPECT_FALSE(thread->HasBeenStarted()); |
| + thread->Start(); |
| + EXPECT_TRUE(thread->HasBeenStarted()); |
| + EXPECT_FALSE(thread->HasBeenJoined()); |
| + |
| + EXPECT_DCHECK_DEATH(thread->Join()); |
| } |
| -TEST(SimpleThreadTest, DeleteNonJoinableWithoutJoinIsSafe) { |
| +TEST(SimpleThreadTest, NonJoinableThreadDeathOnDestruction) { |
| SleepRunner runner; |
| SimpleThread::Options options; |
| options.joinable = false; |
| - DelegateSimpleThread thread(&runner, "noop_runner", options); |
| - thread.Start(); |
| - // Nothing blows up when |thread| goes out of scope. |
| + DelegateSimpleThread* thread = |
| + new DelegateSimpleThread(&runner, "noop_runner", options); |
| + ANNOTATE_LEAKING_OBJECT_PTR(thread); |
| + |
| + thread->Start(); |
| + EXPECT_DCHECK_DEATH({ delete thread; }); |
| } |
| TEST(SimpleThreadTest, ThreadPool) { |