Make `os.scandir` retry on system calls failing with EINTR
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Bug report
Bug description:
In a long-running script, I hit:
[…]
File "/Users/gsnedders/ct.py", line 104, in worker
with os.scandir(path) as it:
~~~~~~~~~~^^^^^^
InterruptedError: [Errno 4] Interrupted system call: '/Users/gsnedders/Library/Containers/com.apple.ScreenTimeWidgetApplication.ScreenTimeWidgetExtension/Data/Library/Application Scripts'
No repro case is provided, because that would require making syscalls fail with EINTR reliably somehow.
PEP 475 (Retry system calls failing with EINTR) implies to me that os.scandir should be retrying, rather than just failing here.
It does appear that os.scandir doesn't always retry, looking at the source:
The iterator itself also seems to not retry:
CPython versions tested on:
3.13
Operating systems tested on:
macOS
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Lisez PEP 475 et l’implémentation liée de os.scandir dans Modules/posixmodule.c, y compris le code de l’itérateur aux lignes référencées. Vérifiez comment sont gérés les appels système qui renvoient EINTR et vérifiez que os.scandir réessaie au lieu de lever InterruptedError. Le travail est considéré comme terminé lorsque l’appel initial et le comportement de l’itérateur correspondent tous deux à la politique de nouvelle tentative prévue.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- c, python
- Domaine
- operating-systems
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 48/100