STINNER Victor <[email protected]> added the comment:
So PyOS_InterruptOccurred() must be called with the GIL held since 3.8, it's
just that the nobody noticed the bug before.
If SIGGINT is tripped and the GIL is released, PyOS_InterruptOccurred() does
also crash in Python 3.8.
--
One way to see the bug in Python 3.8 without having to trip SIGINT.
Apply this patch:
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 0c9a2671fe..b850af3163 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -1729,11 +1729,12 @@ PyOS_FiniInterrupts(void)
int
PyOS_InterruptOccurred(void)
{
+ _PyRuntimeState *runtime = &_PyRuntime;
+ if (!is_main(runtime)) {
+ return 0;
+ }
+
if (_Py_atomic_load_relaxed(&Handlers[SIGINT].tripped)) {
- _PyRuntimeState *runtime = &_PyRuntime;
- if (!is_main(runtime)) {
- return 0;
- }
_Py_atomic_store_relaxed(&Handlers[SIGINT].tripped, 0);
return 1;
}
$ make
$ find -name "*readline*so" -delete
$ ./python
Python 3.8.3+ (heads/3.8-dirty:00a240bf7f, Jun 1 2020, 17:24:09)
[GCC 10.1.1 20200507 (Red Hat 10.1.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os; os.close(0)
>>>
Erreur de segmentation (core dumped)
---
Reproduce the bug in Python 3.8 without modifying the code, using gdb to
trigger events SIGINT at the right place:
$ gdb ./python
(gdb) b my_fgets
Breakpoint 1 at 0x68b941: file Parser/myreadline.c, line 39.
(gdb) run
Python 3.8.3+ (heads/3.8:00a240bf7f, Jun 1 2020, 17:27:24)
[GCC 10.1.1 20200507 (Red Hat 10.1.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Breakpoint 1, my_fgets (...)
(gdb) p (void)close(0)
(gdb) delete 1
(gdb) signal SIGINT
Continuing with signal SIGINT.
Program received signal SIGSEGV, Segmentation fault.
is_main (runtime=0x7ff6c0 <_PyRuntime>) at ./Modules/signalmodule.c:193
193 PyInterpreterState *interp =
_PyRuntimeState_GetThreadState(runtime)->interp;
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue40826>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com