mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	[3.13] gh-117657: Fix TSan reported data race on ioctl_works (GH-120175) (#120654)
(cherry picked from commit 460cc9e14e)
Co-authored-by: Sam Gross <colesbury@gmail.com>
			
			
This commit is contained in:
		
							parent
							
								
									9172bc35c6
								
							
						
					
					
						commit
						0dbb86c5be
					
				
					 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 | #else | ||||||
| 
 | 
 | ||||||
| #if defined(HAVE_SYS_IOCTL_H) && defined(FIOCLEX) && defined(FIONCLEX) | #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 */ |         /* fast-path: ioctl() only requires one syscall */ | ||||||
|         /* caveat: raise=0 is an indicator that we must be async-signal-safe
 |         /* caveat: raise=0 is an indicator that we must be async-signal-safe
 | ||||||
|          * thus avoid using ioctl() so we skip the fast-path. */ |          * 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; |             request = FIOCLEX; | ||||||
|         err = ioctl(fd, request, NULL); |         err = ioctl(fd, request, NULL); | ||||||
|         if (!err) { |         if (!err) { | ||||||
|             ioctl_works = 1; |             if (_Py_atomic_load_int_relaxed(&ioctl_works) == -1) { | ||||||
|  |                 _Py_atomic_store_int_relaxed(&ioctl_works, 1); | ||||||
|  |             } | ||||||
|             return 0; |             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 |                with EACCES. While FIOCLEX is safe operation it may be | ||||||
|                unavailable because ioctl was denied altogether. |                unavailable because ioctl was denied altogether. | ||||||
|                This can be the case on Android. */ |                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 */ |         /* fallback to fcntl() if ioctl() does not work */ | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -35,7 +35,6 @@ race_top:new_reference | ||||||
| race_top:set_contains_key | race_top:set_contains_key | ||||||
| # https://gist.github.com/colesbury/d13d033f413b4ad07929d044bed86c35 | # https://gist.github.com/colesbury/d13d033f413b4ad07929d044bed86c35 | ||||||
| race_top:set_discard_entry | race_top:set_discard_entry | ||||||
| race_top:set_inheritable |  | ||||||
| race_top:_PyDict_CheckConsistency | race_top:_PyDict_CheckConsistency | ||||||
| race_top:_Py_dict_lookup_threadsafe | race_top:_Py_dict_lookup_threadsafe | ||||||
| race_top:_multiprocessing_SemLock_acquire_impl | race_top:_multiprocessing_SemLock_acquire_impl | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Miss Islington (bot)
						Miss Islington (bot)