gh-117657: Fix TSan reported data race on ioctl_works (#120175)

This commit is contained in:
Sam Gross 2024-06-17 13:23:40 -04:00 committed by GitHub
parent d9b4316374
commit 460cc9e14e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 5 additions and 4 deletions

View File

@ -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 */
} }

View File

@ -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