diff options
Diffstat (limited to 'base/non_thread_safe_unittest.cc')
-rw-r--r-- | base/non_thread_safe_unittest.cc | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/base/non_thread_safe_unittest.cc b/base/non_thread_safe_unittest.cc index 0603987..1db198b 100644 --- a/base/non_thread_safe_unittest.cc +++ b/base/non_thread_safe_unittest.cc @@ -23,6 +23,10 @@ class NonThreadSafeClass : public NonThreadSafe { DCHECK(CalledOnValidThread()); } + void DetachFromThread() { + NonThreadSafe::DetachFromThread(); + } + private: DISALLOW_COPY_AND_ASSIGN(NonThreadSafeClass); }; @@ -74,6 +78,20 @@ TEST(NonThreadSafeTest, CallsAllowedOnSameThread) { non_thread_safe_class.reset(); } +TEST(NonThreadSafeTest, DetachThenDestructOnDifferentThread) { + scoped_ptr<NonThreadSafeClass> non_thread_safe_class( + new NonThreadSafeClass); + + // Verify that the destructor doesn't assert when called on a different thread + // after a detach. + non_thread_safe_class->DetachFromThread(); + DeleteNonThreadSafeClassOnThread delete_on_thread( + non_thread_safe_class.release()); + + delete_on_thread.Start(); + delete_on_thread.Join(); +} + #if GTEST_HAS_DEATH_TEST TEST(NonThreadSafeDeathTest, MethodNotAllowedOnDifferentThread) { |