python / python/cpython

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

Đang mở
#130,209 1 bình luận 1 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

extension-modules type-feature
Ngôn ngữ chính
Python
Star
77.2k
Fork
35.9k
Chỉ số merge pull request
Chỉ số pull request đang chờ

Mô tả

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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Đọc PEP 475 và phần triển khai os.scandir được liên kết trong Modules/posixmodule.c, bao gồm mã iterator tại các dòng được tham chiếu. Kiểm tra cách các system call trả về EINTR được xử lý và xác minh rằng os.scandir thử lại thay vì phát sinh InterruptedError. Được xem là hoàn tất khi cả lời gọi ban đầu và hành vi của iterator đều phù hợp với chính sách thử lại dự kiến.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
c, python
Lĩnh vực
operating-systems
Loại issue
Lỗi
Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Đặc tả rõ ràng
Mức phù hợp với người mới
48/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.