mirror of
https://github.com/python/cpython.git
synced 2025-12-23 09:19:18 +00:00
[3.13] gh-138860: Lazy import rlcompleter in pdb to avoid deadlock in… (#139281)
[3.13] gh-138860: Lazy import rlcompleter in pdb to avoid deadlock in subprocess (GH-139185)
(cherry picked from commit c8624cd367)
This commit is contained in:
parent
096772dd5d
commit
dbe4690772
2 changed files with 11 additions and 3 deletions
13
Lib/pdb.py
13
Lib/pdb.py
|
|
@ -90,7 +90,6 @@ import linecache
|
|||
import _colorize
|
||||
|
||||
from contextlib import contextmanager
|
||||
from rlcompleter import Completer
|
||||
from types import CodeType
|
||||
|
||||
|
||||
|
|
@ -332,6 +331,15 @@ class Pdb(bdb.Bdb, cmd.Cmd):
|
|||
readline.set_completer_delims(' \t\n`@#%^&*()=+[{]}\\|;:\'",<>?')
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
# GH-138860
|
||||
# We need to lazy-import rlcompleter to avoid deadlock
|
||||
# We cannot import it during self.complete* methods because importing
|
||||
# rlcompleter for the first time will overwrite readline's completer
|
||||
# So we import it here and save the Completer class
|
||||
from rlcompleter import Completer
|
||||
self.RlCompleter = Completer
|
||||
|
||||
self.allow_kbdint = False
|
||||
self.nosigint = nosigint
|
||||
# Consider these characters as part of the command so when the users type
|
||||
|
|
@ -986,10 +994,9 @@ class Pdb(bdb.Bdb, cmd.Cmd):
|
|||
conv_vars = self.curframe.f_globals.get('__pdb_convenience_variables', {})
|
||||
return [f"${name}" for name in conv_vars if name.startswith(text[1:])]
|
||||
|
||||
# Use rlcompleter to do the completion
|
||||
state = 0
|
||||
matches = []
|
||||
completer = Completer(self.curframe.f_globals | self.curframe_locals)
|
||||
completer = self.RlCompleter(self.curframe.f_globals | self.curframe.f_locals)
|
||||
while (match := completer.complete(text, state)) is not None:
|
||||
matches.append(match)
|
||||
state += 1
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
Lazy import :mod:`rlcompleter` in :mod:`pdb` to avoid deadlock in subprocess.
|
||||
Loading…
Add table
Add a link
Reference in a new issue