[issue40415] _asyncio extensions crashes if initialized multiple times in same process

2020-04-28 Thread STINNER Victor


Change by STINNER Victor :


--
superseder:  -> Use-after-free crash if multiple interpreters import asyncio 
module

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue40415] _asyncio extensions crashes if initialized multiple times in same process

2020-04-27 Thread Gregory Szorc


Gregory Szorc  added the comment:

Oh, I just went to patch this and it is a dupe of 40294, which has already been 
fixed and backported.

--
resolution:  -> duplicate
stage:  -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue40415] _asyncio extensions crashes if initialized multiple times in same process

2020-04-27 Thread Gregory Szorc


Change by Gregory Szorc :


--
nosy: +vstinner

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue40415] _asyncio extensions crashes if initialized multiple times in same process

2020-04-27 Thread Gregory Szorc


New submission from Gregory Szorc :

Most of CPython's extensions can be initialized and freed multiple times in the 
same process. However, _asyncio crashes on at least CPython 3.8.2 when this is 
done.

STR:

1. Create a new Python interpreter
2. Have it import _asyncio
3. Finalize that interpreter.
4. Create a new Python interpreter
5. Have it import _asyncio

There are probably STR in pure Python by forcing _imp.create_dynamic() to run 
multiple times after the module is unloaded.

The crash occurs due to unchecked NULL access in `Py_INCREF(all_tasks);` in 
`PyInit__asyncio()`.

I think the underlying problem is module_init() is short-circuiting because 
`module_initialized` is set. And `module_initialized` is set on subsequent 
module loads because `module_free()` isn't clearing it.

--
components: asyncio
messages: 367483
nosy: asvetlov, indygreg, yselivanov
priority: normal
severity: normal
status: open
title: _asyncio extensions crashes if initialized multiple times in same process
versions: Python 3.8, Python 3.9

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com