diff options
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(); +} |