python / python/cpython

Make `os.scandir` retry on system calls failing with EINTR

Aberta
#130,209 1 comentário 1 reação 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

extension-modules type-feature
Linguagem predominante
Python
Estrelas
77.2k
Forks
35.9k
Métricas de merge de PRs
Métricas de PR pendentes

Descrição

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:

https://github.com/python/cpython/blob/ae3064608935367c860182dc1b364631082ecdff/Modules/posixmodule.c#L16489

The iterator itself also seems to not retry:

https://github.com/python/cpython/blob/ae3064608935367c860182dc1b364631082ecdff/Modules/posixmodule.c#L16290

CPython versions tested on:

3.13

Operating systems tested on:

macOS

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Leia o PEP 475 e a implementação vinculada de os.scandir em Modules/posixmodule.c, incluindo o código do iterador nas linhas referenciadas. Verifique como as chamadas de sistema que retornam EINTR são tratadas e confirme que os.scandir tenta novamente em vez de gerar InterruptedError. Está concluído quando tanto a chamada inicial quanto o comportamento do iterador corresponderem à política de novas tentativas pretendida.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
c, python
Domínio
operating-systems
Tipo de issue
Bug
Dificuldade
3/5
Tempo estimado
1-2 dias
Status de atividade
Estagnada
Clareza
Claramente especificada
Facilidade para iniciantes
48/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.