Skip to content

Commit

Permalink
Replace deprecated asyncio.get_child_watcher()
Browse files Browse the repository at this point in the history
Use PidfdChildWatcher if os.pidfd_open is available and
otherwise use ThreadedChildWatcher which should work in any case.

Fixes #583
  • Loading branch information
cryptomilk committed Jan 9, 2025
1 parent 6fa9045 commit 6a23840
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 4 deletions.
38 changes: 35 additions & 3 deletions pynvim/msgpack_rpc/event_loop/asyncio.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,10 +188,42 @@ async def connect_stdout():

@override
def _connect_child(self, argv: List[str]) -> None:
def can_use_pidfd():
# Unix system without pidfd_open?
if not hasattr(os, 'pidfd_open'):
return False

# Check that we are not blocked by security policy like SECCOMP
try:
pid = os.getpid()
fd = os.pidfd_open(pid, 0)
os.close(fd)
except OSError:
return False

return True

def get_child_watcher():
if can_use_pidfd():
try:
from asyncio.unix_events import PidfdChildWatcher
return PidfdChildWatcher()
except ImportError:
pass

try:
from asyncio.unix_events import ThreadedChildWatcher
return ThreadedChildWatcher()
except ImportError:
pass

# FIXME Python 3.7, return None if we drop support
return asyncio.get_child_watcher()

if os.name != 'nt':
# see #238, #241
self._child_watcher = asyncio.get_child_watcher()
self._child_watcher.attach_loop(self._loop)
watcher = get_child_watcher()
watcher.attach_loop(self._loop)
self._child_watcher = watcher

async def create_subprocess():
transport: asyncio.SubprocessTransport # type: ignore
Expand Down
3 changes: 2 additions & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
[tox]
min_version = 4.0
envlist =
py{37,38,39,310,311,312}-asyncio
py{37,38,39,310,311,312,313}-asyncio
checkqa
skip_missing_interpreters =
true
Expand All @@ -18,6 +18,7 @@ python =
3.10: py310
3.11: py311
3.12: py312
3.13: py313
pypy3: pypy3

[testenv]
Expand Down

0 comments on commit 6a23840

Please sign in to comment.