Skip to content

Commit

Permalink
bpo-33623: Fix possible SIGSGV when asyncio.Future is created in __de…
Browse files Browse the repository at this point in the history
…l__ (GH-7080)

(cherry picked from commit 35230d0)

Co-authored-by: Yury Selivanov <yury@magic.io>
  • Loading branch information
miss-islington and 1st1 committed May 28, 2018
1 parent 983c1ba commit 51d0a2c
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 1 deletion.
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1 @@
Fix possible SIGSGV when asyncio.Future is created in __del__
8 changes: 7 additions & 1 deletion Modules/_asynciomodule.c
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -501,7 +501,13 @@ future_init(FutureObj *fut, PyObject *loop)
if (is_true < 0) { if (is_true < 0) {
return -1; 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); fut->fut_source_tb = _PyObject_CallNoArg(traceback_extract_stack);
if (fut->fut_source_tb == NULL) { if (fut->fut_source_tb == NULL) {
return -1; return -1;
Expand Down

0 comments on commit 51d0a2c

Please sign in to comment.