aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorkosak <kosak@google.com>2015-02-14 02:13:32 +0000
committerkosak <kosak@google.com>2015-02-14 02:13:32 +0000
commit8209a45e2484a7eecc31a20a6dc6b8fd423d0b87 (patch)
tree7aec0ef4659f22086b75246601d9e5272abf5f73 /include
parentb215e30cadd11db7c9f378b57ffecce92aacce37 (diff)
downloadgoogletest-8209a45e2484a7eecc31a20a6dc6b8fd423d0b87.tar.gz
googletest-8209a45e2484a7eecc31a20a6dc6b8fd423d0b87.tar.bz2
googletest-8209a45e2484a7eecc31a20a6dc6b8fd423d0b87.zip
Add asserts to prevent mysterious hangs in a non-thread-safe gmock build.
Diffstat (limited to 'include')
-rw-r--r--include/gtest/internal/gtest-linked_ptr.h14
1 files changed, 12 insertions, 2 deletions
diff --git a/include/gtest/internal/gtest-linked_ptr.h b/include/gtest/internal/gtest-linked_ptr.h
index b1362cd0..36029422 100644
--- a/include/gtest/internal/gtest-linked_ptr.h
+++ b/include/gtest/internal/gtest-linked_ptr.h
@@ -110,7 +110,12 @@ class linked_ptr_internal {
MutexLock lock(&g_linked_ptr_mutex);
linked_ptr_internal const* p = ptr;
- while (p->next_ != ptr) p = p->next_;
+ while (p->next_ != ptr) {
+ assert(p->next_ != this &&
+ "Trying to join() a linked ring we are already in. "
+ "Is GMock thread safety enabled?");
+ p = p->next_;
+ }
p->next_ = this;
next_ = ptr;
}
@@ -123,7 +128,12 @@ class linked_ptr_internal {
if (next_ == this) return true;
linked_ptr_internal const* p = next_;
- while (p->next_ != this) p = p->next_;
+ while (p->next_ != this) {
+ assert(p->next_ != next_ &&
+ "Trying to depart() a linked ring we are not in. "
+ "Is GMock thread safety enabled?");
+ p = p->next_;
+ }
p->next_ = next_;
return false;
}