Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
8ad8db56
Commit
8ad8db56
authored
Oct 12, 2016
by
Xavier de Gaye
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #20766: Fix references leaked by pdb in the handling of SIGINT handlers.
parent
f3aaf176
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
33 additions
and
3 deletions
+33
-3
Lib/pdb.py
Lib/pdb.py
+7
-3
Lib/test/test_pdb.py
Lib/test/test_pdb.py
+23
-0
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/pdb.py
View file @
8ad8db56
...
...
@@ -134,6 +134,8 @@ line_prefix = '\n-> ' # Probably a better default
class
Pdb
(
bdb
.
Bdb
,
cmd
.
Cmd
):
_previous_sigint_handler
=
None
def
__init__
(
self
,
completekey
=
'tab'
,
stdin
=
None
,
stdout
=
None
,
skip
=
None
,
nosigint
=
False
):
bdb
.
Bdb
.
__init__
(
self
,
skip
=
skip
)
...
...
@@ -187,8 +189,6 @@ class Pdb(bdb.Bdb, cmd.Cmd):
self
.
message
(
"
\
n
Program interrupted. (Use 'cont' to resume)."
)
self
.
set_step
()
self
.
set_trace
(
frame
)
# restore previous signal handler
signal
.
signal
(
signal
.
SIGINT
,
self
.
_previous_sigint_handler
)
def
reset
(
self
):
bdb
.
Bdb
.
reset
(
self
)
...
...
@@ -337,6 +337,10 @@ class Pdb(bdb.Bdb, cmd.Cmd):
(
expr
,
newvalue
,
oldvalue
))
def
interaction
(
self
,
frame
,
traceback
):
# Restore the previous signal handler at the Pdb prompt.
if
Pdb
.
_previous_sigint_handler
:
signal
.
signal
(
signal
.
SIGINT
,
Pdb
.
_previous_sigint_handler
)
Pdb
.
_previous_sigint_handler
=
None
if
self
.
setup
(
frame
,
traceback
):
# no interaction desired at this time (happens if .pdbrc contains
# a command like "continue")
...
...
@@ -1037,7 +1041,7 @@ class Pdb(bdb.Bdb, cmd.Cmd):
"""
if
not
self
.
nosigint
:
try
:
self
.
_previous_sigint_handler
=
\
Pdb
.
_previous_sigint_handler
=
\
signal
.
signal
(
signal
.
SIGINT
,
self
.
sigint_handler
)
except
ValueError
:
# ValueError happens when do_continue() is invoked from
...
...
Lib/test/test_pdb.py
View file @
8ad8db56
...
...
@@ -911,6 +911,29 @@ def test_pdb_next_command_subiterator():
(Pdb) continue
"""
def
test_pdb_issue_20766
():
"""Test for reference leaks when the SIGINT handler is set.
>>> def test_function():
... i = 1
... while i <= 2:
... sess = pdb.Pdb()
... sess.set_trace(sys._getframe())
... print('pdb %d: %s' % (i, sess._previous_sigint_handler))
... i += 1
>>> with PdbTestInput(['continue',
... 'continue']):
... test_function()
> <doctest test.test_pdb.test_pdb_issue_20766[0]>(6)test_function()
-> print('pdb %d: %s' % (i, sess._previous_sigint_handler))
(Pdb) continue
pdb 1: <built-in function default_int_handler>
> <doctest test.test_pdb.test_pdb_issue_20766[0]>(5)test_function()
-> sess.set_trace(sys._getframe())
(Pdb) continue
pdb 2: <built-in function default_int_handler>
"""
class
PdbTestCase
(
unittest
.
TestCase
):
...
...
Misc/NEWS
View file @
8ad8db56
...
...
@@ -107,6 +107,9 @@ Core and Builtins
Library
-------
- Issue #20766: Fix references leaked by pdb in the handling of SIGINT
handlers.
- Issue #26293: Fixed writing ZIP files that starts not from the start of the
file. Offsets in ZIP file now are relative to the start of the archive in
conforming to the specification.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment