-
-
Notifications
You must be signed in to change notification settings - Fork 33.2k
Open
Labels
OS-unsupportedstdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
If you set ulimit -n unlimited on Solaris and its derivatives (where /dev/poll is available) and import selectors, Python crashes with a MemoryError:
> ulimit -n unlimited
> python3.11 -c "import selectors"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.11/selectors.py", line 613, in <module>
elif _can_use('devpoll'):
^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/selectors.py", line 594, in _can_use
selector_obj = selector()
^^^^^^^^^^
MemoryErrorThe issue is that Python uses RLIMIT_NOFILE to allocated that many struct pollfds, and there is no upper limit. Infinity is represented by something close to INT_MAX, and the allocation thus fails.
Your environment
I tested this on Oracle Solaris with 3.11, 3.9 and 3.7 (where you need a slightly different way to crash it: python3.7 -c "import select; select.devpoll()").
I verified that on SmartOS, it behaves the same way (on SmartOS, you can actually set huge ulimit -n values that break it as well).
Linked PRs
Metadata
Metadata
Assignees
Labels
OS-unsupportedstdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Projects
Status
No status