You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 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).
If you set
ulimit -n unlimited
on Solaris and its derivatives (where/dev/poll
is available) and importselectors
, Python crashes with aMemoryError
:The issue is that Python uses
RLIMIT_NOFILE
to allocated that manystruct 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
The text was updated successfully, but these errors were encountered: