diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2018-10-04 06:10:47 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2018-10-04 06:10:47 +0000 |
commit | 30abea02e3565372e6a93be60ea6356a176a23be (patch) | |
tree | 55161cad4ca52de23dd4aad27d63f4c932a6206b /system/common/message_loop_thread_unittest.cc | |
parent | 9c64d966320cc48923680aa52cb37f10b330349d (diff) | |
parent | 33b5f550fcf2037b80ea880afbd948152fc4f4d9 (diff) |
Merge "MessageLoopThread: Release lock during blocked StartUp/ShutDown"
Diffstat (limited to 'system/common/message_loop_thread_unittest.cc')
-rw-r--r-- | system/common/message_loop_thread_unittest.cc | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/system/common/message_loop_thread_unittest.cc b/system/common/message_loop_thread_unittest.cc index 67a0cfd37d..e77a44ce19 100644 --- a/system/common/message_loop_thread_unittest.cc +++ b/system/common/message_loop_thread_unittest.cc @@ -280,3 +280,53 @@ TEST_F(MessageLoopThreadTest, shut_down_while_in_callback) { std::string my_name = name_future.get(); ASSERT_EQ(name, my_name); } + +// Verify the message loop thread will shutdown after callback finishes +TEST_F(MessageLoopThreadTest, shut_down_while_in_callback_check_lock) { + std::string name = "test_thread"; + MessageLoopThread message_loop_thread(name); + message_loop_thread.StartUp(); + message_loop_thread.DoInThread( + FROM_HERE, + base::BindOnce([](MessageLoopThread* thread) { thread->IsRunning(); }, + &message_loop_thread)); + message_loop_thread.ShutDown(); +} + +// Verify multiple threads try shutdown, no deadlock/crash +TEST_F(MessageLoopThreadTest, shut_down_multi_thread) { + std::string name = "test_thread"; + MessageLoopThread message_loop_thread(name); + message_loop_thread.StartUp(); + auto thread = std::thread(&MessageLoopThread::ShutDown, &message_loop_thread); + message_loop_thread.ShutDown(); + thread.join(); +} + +// Verify multiple threads try startup, no deadlock/crash +TEST_F(MessageLoopThreadTest, start_up_multi_thread) { + std::string name = "test_thread"; + MessageLoopThread message_loop_thread(name); + message_loop_thread.StartUp(); + auto thread = std::thread(&MessageLoopThread::StartUp, &message_loop_thread); + thread.join(); +} + +// Verify multiple threads try startup/shutdown, no deadlock/crash +TEST_F(MessageLoopThreadTest, start_up_shut_down_multi_thread) { + std::string name = "test_thread"; + MessageLoopThread message_loop_thread(name); + message_loop_thread.StartUp(); + auto thread = std::thread(&MessageLoopThread::ShutDown, &message_loop_thread); + thread.join(); +} + +// Verify multiple threads try shutdown/startup, no deadlock/crash +TEST_F(MessageLoopThreadTest, shut_down_start_up_multi_thread) { + std::string name = "test_thread"; + MessageLoopThread message_loop_thread(name); + message_loop_thread.StartUp(); + message_loop_thread.ShutDown(); + auto thread = std::thread(&MessageLoopThread::StartUp, &message_loop_thread); + thread.join(); +} |