tsan: fix handling of signals
(do not execute synchronous signals in recursive interceptors) llvm-svn: 168421
This commit is contained in:
		
							parent
							
								
									3233391b50
								
							
						
					
					
						commit
						9ca2afd3a1
					
				| 
						 | 
					@ -1228,8 +1228,10 @@ static void ALWAYS_INLINE rtl_generic_sighandler(bool sigact, int sig,
 | 
				
			||||||
      sig == SIGABRT || sig == SIGFPE || sig == SIGPIPE ||
 | 
					      sig == SIGABRT || sig == SIGFPE || sig == SIGPIPE ||
 | 
				
			||||||
      // If we are sending signal to ourselves, we must process it now.
 | 
					      // If we are sending signal to ourselves, we must process it now.
 | 
				
			||||||
      (sctx && sig == sctx->int_signal_send) ||
 | 
					      (sctx && sig == sctx->int_signal_send) ||
 | 
				
			||||||
      // If we are in blocking function, we can safely process it now.
 | 
					      // If we are in blocking function, we can safely process it now
 | 
				
			||||||
      (sctx && sctx->in_blocking_func)) {
 | 
					      // (but check if we are in a recursive interceptor,
 | 
				
			||||||
 | 
					      // i.e. pthread_join()->munmap()).
 | 
				
			||||||
 | 
					      (sctx && sctx->in_blocking_func && thr->in_rtl == 1)) {
 | 
				
			||||||
    CHECK(thr->in_rtl == 0 || thr->in_rtl == 1);
 | 
					    CHECK(thr->in_rtl == 0 || thr->in_rtl == 1);
 | 
				
			||||||
    int in_rtl = thr->in_rtl;
 | 
					    int in_rtl = thr->in_rtl;
 | 
				
			||||||
    thr->in_rtl = 0;
 | 
					    thr->in_rtl = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue