Skip to content

Commit

Permalink
[3.13] gh-117657: Fix TSan reported data race on ioctl_works (GH-120175
Browse files Browse the repository at this point in the history
…) (#120654)

(cherry picked from commit 460cc9e)

Co-authored-by: Sam Gross <[email protected]>
  • Loading branch information
miss-islington and colesbury authored Jun 17, 2024
1 parent 9172bc3 commit 0dbb86c
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 4 deletions.
8 changes: 5 additions & 3 deletions Python/fileutils.c
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
Expand All @@ -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;
}

Expand All @@ -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 */
}
Expand Down
1 change: 0 additions & 1 deletion Tools/tsan/suppressions_free_threading.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ race_top:new_reference
race_top:set_contains_key
# https://gist.github.com/colesbury/d13d033f413b4ad07929d044bed86c35
race_top:set_discard_entry
race_top:set_inheritable
race_top:_PyDict_CheckConsistency
race_top:_Py_dict_lookup_threadsafe
race_top:_multiprocessing_SemLock_acquire_impl
Expand Down

0 comments on commit 0dbb86c

Please sign in to comment.