merge(3p/absl): subtree merge of Abseil up to e19260f
... notably, this includes Abseil's own StatusOr type, which conflicted with our implementation (that was taken from TensorFlow). Change-Id: Ie7d6764b64055caaeb8dc7b6b9d066291e6b538f
This commit is contained in:
parent
cc27324d02
commit
082c006c04
854 changed files with 11260 additions and 5296 deletions
|
@ -30,6 +30,7 @@
|
|||
|
||||
#include "gtest/gtest.h"
|
||||
#include "absl/base/attributes.h"
|
||||
#include "absl/base/config.h"
|
||||
#include "absl/base/internal/raw_logging.h"
|
||||
#include "absl/base/internal/sysinfo.h"
|
||||
#include "absl/memory/memory.h"
|
||||
|
@ -706,6 +707,40 @@ TEST(Mutex, LockWhen) {
|
|||
t.join();
|
||||
}
|
||||
|
||||
TEST(Mutex, LockWhenGuard) {
|
||||
absl::Mutex mu;
|
||||
int n = 30;
|
||||
bool done = false;
|
||||
|
||||
// We don't inline the lambda because the conversion is ambiguous in MSVC.
|
||||
bool (*cond_eq_10)(int *) = [](int *p) { return *p == 10; };
|
||||
bool (*cond_lt_10)(int *) = [](int *p) { return *p < 10; };
|
||||
|
||||
std::thread t1([&mu, &n, &done, cond_eq_10]() {
|
||||
absl::ReaderMutexLock lock(&mu, absl::Condition(cond_eq_10, &n));
|
||||
done = true;
|
||||
});
|
||||
|
||||
std::thread t2[10];
|
||||
for (std::thread &t : t2) {
|
||||
t = std::thread([&mu, &n, cond_lt_10]() {
|
||||
absl::WriterMutexLock lock(&mu, absl::Condition(cond_lt_10, &n));
|
||||
++n;
|
||||
});
|
||||
}
|
||||
|
||||
{
|
||||
absl::MutexLock lock(&mu);
|
||||
n = 0;
|
||||
}
|
||||
|
||||
for (std::thread &t : t2) t.join();
|
||||
t1.join();
|
||||
|
||||
EXPECT_TRUE(done);
|
||||
EXPECT_EQ(n, 10);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------
|
||||
// The following test requires Mutex::ReaderLock to be a real shared
|
||||
// lock, which is not the case in all builds.
|
||||
|
@ -815,7 +850,7 @@ TEST(Mutex, MutexReaderDecrementBug) ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
|||
|
||||
// Test that we correctly handle the situation when a lock is
|
||||
// held and then destroyed (w/o unlocking).
|
||||
#ifdef THREAD_SANITIZER
|
||||
#ifdef ABSL_HAVE_THREAD_SANITIZER
|
||||
// TSAN reports errors when locked Mutexes are destroyed.
|
||||
TEST(Mutex, DISABLED_LockedMutexDestructionBug) NO_THREAD_SAFETY_ANALYSIS {
|
||||
#else
|
||||
|
@ -1001,9 +1036,6 @@ TEST(Mutex, AcquireFromCondition) {
|
|||
x.mu0.Unlock();
|
||||
}
|
||||
|
||||
// The deadlock detector is not part of non-prod builds, so do not test it.
|
||||
#if !defined(ABSL_INTERNAL_USE_NONPROD_MUTEX)
|
||||
|
||||
TEST(Mutex, DeadlockDetector) {
|
||||
absl::SetMutexDeadlockDetectionMode(absl::OnDeadlockCycle::kAbort);
|
||||
|
||||
|
@ -1067,7 +1099,7 @@ class ScopedDisableBazelTestWarnings {
|
|||
const char ScopedDisableBazelTestWarnings::kVarName[] =
|
||||
"TEST_WARNINGS_OUTPUT_FILE";
|
||||
|
||||
#ifdef THREAD_SANITIZER
|
||||
#ifdef ABSL_HAVE_THREAD_SANITIZER
|
||||
// This test intentionally creates deadlocks to test the deadlock detector.
|
||||
TEST(Mutex, DISABLED_DeadlockDetectorBazelWarning) {
|
||||
#else
|
||||
|
@ -1101,7 +1133,7 @@ TEST(Mutex, DeadlockDetectorBazelWarning) {
|
|||
// annotation-based static thread-safety analysis is not currently
|
||||
// predicate-aware and cannot tell if the two for-loops that acquire and
|
||||
// release the locks have the same predicates.
|
||||
TEST(Mutex, DeadlockDetectorStessTest) ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
||||
TEST(Mutex, DeadlockDetectorStressTest) ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
||||
// Stress test: Here we create a large number of locks and use all of them.
|
||||
// If a deadlock detector keeps a full graph of lock acquisition order,
|
||||
// it will likely be too slow for this test to pass.
|
||||
|
@ -1119,7 +1151,7 @@ TEST(Mutex, DeadlockDetectorStessTest) ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef THREAD_SANITIZER
|
||||
#ifdef ABSL_HAVE_THREAD_SANITIZER
|
||||
// TSAN reports errors when locked Mutexes are destroyed.
|
||||
TEST(Mutex, DISABLED_DeadlockIdBug) NO_THREAD_SAFETY_ANALYSIS {
|
||||
#else
|
||||
|
@ -1157,7 +1189,6 @@ TEST(Mutex, DeadlockIdBug) ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
|||
c.Lock();
|
||||
c.Unlock();
|
||||
}
|
||||
#endif // !defined(ABSL_INTERNAL_USE_NONPROD_MUTEX)
|
||||
|
||||
// --------------------------------------------------------
|
||||
// Test for timeouts/deadlines on condition waits that are specified using
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue