summaryrefslogtreecommitdiffstats
path: root/base/non_thread_safe_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'base/non_thread_safe_unittest.cc')
-rw-r--r--base/non_thread_safe_unittest.cc18
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) {