mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	gh-117657: Fix TSan reported data race on ioctl_works (#120175)
This commit is contained in:
		
							parent
							
								
									d9b4316374
								
							
						
					
					
						commit
						460cc9e14e
					
				
					 2 changed files with 5 additions and 4 deletions
				
			
		|  | @ -1502,7 +1502,7 @@ set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works) | |||
| #else | ||||
| 
 | ||||
| #if defined(HAVE_SYS_IOCTL_H) && defined(FIOCLEX) && defined(FIONCLEX) | ||||
|     if (ioctl_works != 0 && raise != 0) { | ||||
|     if (raise != 0 && _Py_atomic_load_int_relaxed(&ioctl_works) != 0) { | ||||
|         /* fast-path: ioctl() only requires one syscall */ | ||||
|         /* caveat: raise=0 is an indicator that we must be async-signal-safe
 | ||||
|          * thus avoid using ioctl() so we skip the fast-path. */ | ||||
|  | @ -1512,7 +1512,9 @@ set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works) | |||
|             request = FIOCLEX; | ||||
|         err = ioctl(fd, request, NULL); | ||||
|         if (!err) { | ||||
|             ioctl_works = 1; | ||||
|             if (_Py_atomic_load_int_relaxed(&ioctl_works) == -1) { | ||||
|                 _Py_atomic_store_int_relaxed(&ioctl_works, 1); | ||||
|             } | ||||
|             return 0; | ||||
|         } | ||||
| 
 | ||||
|  | @ -1539,7 +1541,7 @@ set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works) | |||
|                with EACCES. While FIOCLEX is safe operation it may be | ||||
|                unavailable because ioctl was denied altogether. | ||||
|                This can be the case on Android. */ | ||||
|             ioctl_works = 0; | ||||
|             _Py_atomic_store_int_relaxed(&ioctl_works, 0); | ||||
|         } | ||||
|         /* fallback to fcntl() if ioctl() does not work */ | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Sam Gross
						Sam Gross