8000 Merge pull request #5290 from youknowone/subprocess · RustPython/RustPython@4e915de · GitHub
[go: up one dir, main page]

Skip to content

Commit 4e915de

Browse files
authored
Merge pull request #5290 from youknowone/subprocess
Update subprocess from CPython 3.12.3
2 parents c3ccb5b + 94e6648 commit 4e915de

File tree

4 files changed

+397
-195
lines changed

4 files changed

+397
-195
lines changed

Lib/selectors.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,11 @@ def _fileobj_to_fd(fileobj):
5050
Object used to associate a file object to its backing
5151
file descriptor, selected event mask, and attached data.
5252
"""
53-
if sys.version_info >= (3, 5):
54-
SelectorKey.fileobj.__doc__ = 'File object registered.'
55-
SelectorKey.fd.__doc__ = 'Underlying file descriptor.'
56-
SelectorKey.events.__doc__ = 'Events that must be waited for on this file object.'
57-
SelectorKey.data.__doc__ = ('''Optional opaque data associated to this file object.
58-
For example, this could be used to store a per-client session ID.''')
53+
SelectorKey.fileobj.__doc__ = 'File object registered.'
54+
SelectorKey.fd.__doc__ = 'Underlying file descriptor.'
55+
SelectorKey.events.__doc__ = 'Events that must be waited for on this file object.'
56+
SelectorKey.data.__doc__ = ('''Optional opaque data associated to this file object.
57+
For example, this could be used to store a per-client session ID.''')
5958

6059

6160
class _SelectorMapping(Mapping):
@@ -510,6 +509,7 @@ class KqueueSelector(_BaseSelectorImpl):
510509
def __init__(self):
511510
super().__init__()
512511
self._selector = select.kqueue()
512+
self._max_events = 0
513513

514514
def fileno(self):
515515
return self._selector.fileno()
@@ -521,10 +521,12 @@ def register(self, fileobj, events, data=None):
521521
kev = select.kevent(key.fd, select.KQ_FILTER_READ,
522522
select.KQ_EV_ADD)
523523
self._selector.control([kev], 0, 0)
524+
self._max_events += 1
524525
if events & EVENT_WRITE:
525526
kev = select.kevent(key.fd, select.KQ_FILTER_WRITE,
526527
select.KQ_EV_ADD)
527528
self._selector.control([kev], 0, 0)
529+
self._max_events += 1
528530
except:
529531
super().unregister(fileobj)
530532
raise
@@ -535,6 +537,7 @@ def unregister(self, fileobj):
535537
if key.events & EVENT_READ:
536538
kev = select.kevent(key.fd, select.KQ_FILTER_READ,
537539
select.KQ_EV_DELETE)
540+
self._max_events -= 1
538541
try:
539542
self._selector.control([kev], 0, 0)
540543
except OSError:
@@ -544,6 +547,7 @@ def unregister(self, fileobj):
544547
if key.events & EVENT_WRITE:
545548
kev = select.kevent(key.fd, select.KQ_FILTER_WRITE,
546549
select.KQ_EV_DELETE)
550+
self._max_events -= 1
547551
try:
548552
self._selector.control([kev], 0, 0)
549553
except OSError:
@@ -556,7 +560,7 @@ def select(self, timeout=None):
556560
# If max_ev is 0, kqueue will ignore the timeout. For consistent
557561
# behavior with the other selector classes, we prevent that here
558562
# (using max). See https://bugs.python.org/issue29255
559-
max_ev = max(len(self._fd_to_key), 1)
563+
max_ev = self._max_events or 1
560564
ready = []
561565
try:
562566
kev_list = self._selector.control(None, max_ev, timeout)

0 commit comments

Comments
 (0)
0