-
-
Notifications
You must be signed in to change notification settings - Fork 32.5k
Open
Labels
OS-unsupportedstdlibPython modules in the Lib dirPython modules in the Lib dirtype-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()
^^^^^^^^^^
MemoryError
The issue is that Python uses RLIMIT_NOFILE
to allocated that many struct pollfd
s, 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-unsupportedstdlibPython modules in the Lib dirPython modules in the Lib dirtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Projects
Status
No status