mirror of https://github.com/python/cpython
gh-117657: Fix TSan reported data race on ioctl_works (#120175)
This commit is contained in:
parent
d9b4316374
commit
460cc9e14e
|
@ -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…
Reference in New Issue