[Tsan] Do not flush all streams on exit
Differential Revision: http://reviews.llvm.org/D6462 llvm-svn: 223121
This commit is contained in:
parent
376aee9ae7
commit
fbd6ec09df
|
@ -1800,9 +1800,16 @@ TSAN_INTERCEPTOR(uptr, fwrite, const void *p, uptr size, uptr nmemb, void *f) {
|
|||
return REAL(fwrite)(p, size, nmemb, f);
|
||||
}
|
||||
|
||||
static void FlushStreams() {
|
||||
// Flushing all the streams here may freeze the process if a child thread is
|
||||
// performing file stream operations at the same time.
|
||||
REAL(fflush)(stdout);
|
||||
REAL(fflush)(stderr);
|
||||
}
|
||||
|
||||
TSAN_INTERCEPTOR(void, abort, int fake) {
|
||||
SCOPED_TSAN_INTERCEPTOR(abort, fake);
|
||||
REAL(fflush)(0);
|
||||
FlushStreams();
|
||||
REAL(abort)(fake);
|
||||
}
|
||||
|
||||
|
@ -2131,7 +2138,7 @@ TSAN_INTERCEPTOR(int, vfork, int fake) {
|
|||
|
||||
static int OnExit(ThreadState *thr) {
|
||||
int status = Finalize(thr);
|
||||
REAL(fflush)(0);
|
||||
FlushStreams();
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -2367,10 +2374,7 @@ static void finalize(void *arg) {
|
|||
ThreadState *thr = cur_thread();
|
||||
int status = Finalize(thr);
|
||||
// Make sure the output is not lost.
|
||||
// Flushing all the streams here may freeze the process if a child thread is
|
||||
// performing file stream operations at the same time.
|
||||
REAL(fflush)(stdout);
|
||||
REAL(fflush)(stderr);
|
||||
FlushStreams();
|
||||
if (status)
|
||||
REAL(_exit)(status);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue