diff options
author | Yury Selivanov <yury@magic.io> | 2018-05-28 15:11:31 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-28 15:11:31 (GMT) |
commit | 35230d08e09de4e2e52658d5cb09e5b0ca965418 (patch) | |
tree | 73cbdf7abc99d5b8b3ec09f158f96dcd78e81914 | |
parent | 08c5aca9d13b24b35faf89ebd26fc348ae1731b2 (diff) | |
download | cpython-35230d08e09de4e2e52658d5cb09e5b0ca965418.zip cpython-35230d08e09de4e2e52658d5cb09e5b0ca965418.tar.gz cpython-35230d08e09de4e2e52658d5cb09e5b0ca965418.tar.bz2 |
bpo-33623: Fix possible SIGSGV when asyncio.Future is created in __del__ (#7080)
-rw-r--r-- | Misc/NEWS.d/next/Library/2018-05-23-14-58-05.bpo-33623.wAw1cF.rst | 1 | ||||
-rw-r--r-- | Modules/_asynciomodule.c | 8 |
2 files changed, 8 insertions, 1 deletions
diff --git a/Misc/NEWS.d/next/Library/2018-05-23-14-58-05.bpo-33623.wAw1cF.rst b/Misc/NEWS.d/next/Library/2018-05-23-14-58-05.bpo-33623.wAw1cF.rst new file mode 100644 index 0000000..641874c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-05-23-14-58-05.bpo-33623.wAw1cF.rst @@ -0,0 +1 @@ +Fix possible SIGSGV when asyncio.Future is created in __del__ diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index 6d7249a..c4d1903 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -501,7 +501,13 @@ future_init(FutureObj *fut, PyObject *loop) if (is_true < 0) { return -1; } - if (is_true) { + if (is_true && !_Py_IsFinalizing()) { + /* Only try to capture the traceback if the interpreter is not being + finalized. The original motivation to add a `_Py_IsFinalizing()` + call was to prevent SIGSEGV when a Future is created in a __del__ + method, which is called during the interpreter shutdown and the + traceback module is already unloaded. + */ fut->fut_source_tb = _PyObject_CallNoArg(traceback_extract_stack); if (fut->fut_source_tb == NULL) { return -1; |