brintos

brintos / llvm-project-archived public Read only

0
0
Text · 860 B · 6cb8c29 Raw
38 lines · cpp
1// RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s2 3// Use of gethostent provokes caching of some resources inside of libc.4// They are freed in __libc_thread_freeres very late in thread lifetime,5// after our ThreadFinish. __libc_thread_freeres calls free which6// previously crashed in malloc hooks.7 8#include "../test.h"9#include <netdb.h>10 11long X;12 13extern "C" void __sanitizer_malloc_hook(void *ptr, size_t size) {14  __atomic_fetch_add(&X, 1, __ATOMIC_RELAXED);15}16 17extern "C" void __sanitizer_free_hook(void *ptr) {18  __atomic_fetch_sub(&X, 1, __ATOMIC_RELAXED);19}20 21void *Thread(void *x) {22  sethostent(1);23  gethostbyname("llvm.org");24  gethostent();25  endhostent();26  return NULL;27}28 29int main() {30  pthread_t th;31  pthread_create(&th, NULL, Thread, NULL);32  pthread_join(th, NULL);33  fprintf(stderr, "DONE\n");34  return 0;35}36 37// CHECK: DONE38