forked from OSchip/llvm-project
[tsan] Replace new/delete with a local variable in ThreadSpecificDtors unit test
On OS X, this unit test (ThreadSpecificDtors) fails, because the new and delete operators actually call the overridden operators, which end up using TLVs and crash. Since C++'s new and delete is not important in this test, let's just replace them with a local variable. This fixes the test on OS X. Differential Revision: http://reviews.llvm.org/D14826 llvm-svn: 253583
This commit is contained in:
parent
2763dc29a5
commit
c7157bfd55
|
@ -35,7 +35,7 @@ static void thread_secific_dtor(void *v) {
|
|||
__tsan_write4(&k->cnt);
|
||||
EXPECT_EQ(pthread_mutex_unlock(k->mtx), 0);
|
||||
if (k->val == 42) {
|
||||
delete k;
|
||||
// Okay.
|
||||
} else if (k->val == 43 || k->val == 44) {
|
||||
k->val--;
|
||||
EXPECT_EQ(pthread_setspecific(k->key, k), 0);
|
||||
|
@ -57,14 +57,13 @@ TEST(Posix, ThreadSpecificDtors) {
|
|||
pthread_mutex_t mtx;
|
||||
EXPECT_EQ(pthread_mutex_init(&mtx, 0), 0);
|
||||
pthread_t th[3];
|
||||
thread_key *k[3];
|
||||
k[0] = new thread_key(key, &mtx, 42, &cnt);
|
||||
k[1] = new thread_key(key, &mtx, 43, &cnt);
|
||||
k[2] = new thread_key(key, &mtx, 44, &cnt);
|
||||
EXPECT_EQ(pthread_create(&th[0], 0, dtors_thread, k[0]), 0);
|
||||
EXPECT_EQ(pthread_create(&th[1], 0, dtors_thread, k[1]), 0);
|
||||
thread_key k1 = thread_key(key, &mtx, 42, &cnt);
|
||||
thread_key k2 = thread_key(key, &mtx, 43, &cnt);
|
||||
thread_key k3 = thread_key(key, &mtx, 44, &cnt);
|
||||
EXPECT_EQ(pthread_create(&th[0], 0, dtors_thread, &k1), 0);
|
||||
EXPECT_EQ(pthread_create(&th[1], 0, dtors_thread, &k2), 0);
|
||||
EXPECT_EQ(pthread_join(th[0], 0), 0);
|
||||
EXPECT_EQ(pthread_create(&th[2], 0, dtors_thread, k[2]), 0);
|
||||
EXPECT_EQ(pthread_create(&th[2], 0, dtors_thread, &k3), 0);
|
||||
EXPECT_EQ(pthread_join(th[1], 0), 0);
|
||||
EXPECT_EQ(pthread_join(th[2], 0), 0);
|
||||
EXPECT_EQ(pthread_key_delete(key), 0);
|
||||
|
|
Loading…
Reference in New Issue