You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Disable PyGILState_Check() when Py_NewInterpreter() is called and add more checks on the GIL #70745
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee=Noneclosed_at=<Date2016-03-15.16:16:43.293>created_at=<Date2016-03-14.13:16:41.679>labels= []
title='Disable PyGILState_Check() when Py_NewInterpreter() is called and add more checks on the GIL'updated_at=<Date2018-11-01.00:11:57.241>user='https://github.com/vstinner'
I created this issue while working on the issue bpo-26249 "Change PyMem_Malloc to use pymalloc allocator". I would like to check that application call PyObject_Malloc() and PyMem_Malloc() with the GIL held.
Hum, in fact I prefer to implement GIL check in debug hooks of Python memory allocators. So it becomes to get these checks on Python compiled in debug mode.
Patch 2: Don't touch Python memory allocators.
Instead of I wrote a second patch, pymem_gil_check.patch (based on gil_check-2.patch).
--
Oh, I forgot to mention that the gil_check patch changes PyThreadState_DeleteCurrent(): I reordered instructions to be able call PyObject_Free() with the GIL check.
bpo-10915: Make the PyGILState API compatible with multiple interpreters
bpo-15751: Support subinterpreters in the GIL state API
This issue contains is a compromise: it's a workaround until the root issue is solve. Since bpo-10915 is open since 2011, I'm not sure that it's possible to fix the issue, nor that it's worth :-) To me, subinterpreters still looks like an experimental feature.
changed the title [-]Fix PyGILState_Check() with _testcapi.run_in_subinterp()[/-][+]Disable PyGILState_Check() when Py_NewInterpreter() is called and add more checks on the GIL[/+]on Mar 14, 2016
Activity
vstinner commentedon Mar 14, 2016
assert(PyGILState_Check()) cannot be used in functions called by Py_NewInterpreter(): the assertion fails.
I propose to add a flag to disable PyGILState_Check() while Py_NewInterpreter() is run to be able to add assertions in these functions.
The assertion helps to detect complex bugs like race condition in multithreaded applications.
vstinner commentedon Mar 14, 2016
gil_check.patch: add more checks on the GIL
PyGILState_Check() now returns 1 (success) before the creation of the GIL and
after the destruction of the GIL
Add a flag to disable PyGILState_Check(). Disable PyGILState_Check() when
Py_NewInterpreter() is called
Add assert(PyGILState_Check()) to:
vstinner commentedon Mar 14, 2016
I created this issue while working on the issue bpo-26249 "Change PyMem_Malloc to use pymalloc allocator". I would like to check that application call PyObject_Malloc() and PyMem_Malloc() with the GIL held.
vstinner commentedon Mar 14, 2016
Hum, in fact I prefer to implement GIL check in debug hooks of Python memory allocators. So it becomes to get these checks on Python compiled in debug mode.
Patch 2: Don't touch Python memory allocators.
Instead of I wrote a second patch, pymem_gil_check.patch (based on gil_check-2.patch).
--
Oh, I forgot to mention that the gil_check patch changes PyThreadState_DeleteCurrent(): I reordered instructions to be able call PyObject_Free() with the GIL check.
python-dev commentedon Mar 14, 2016
New changeset c24630367767 by Victor Stinner in branch 'default':
Fix Py_FatalError() if called without the GIL
https://hg.python.org/cpython/rev/c24630367767
python-dev commentedon Mar 14, 2016
New changeset 8a5a0e223559 by Victor Stinner in branch 'default':
Issue bpo-26558: Remove useless check in tracemalloc
https://hg.python.org/cpython/rev/8a5a0e223559
vstinner commentedon Mar 14, 2016
See also issues:
This issue contains is a compromise: it's a workaround until the root issue is solve. Since bpo-10915 is open since 2011, I'm not sure that it's possible to fix the issue, nor that it's worth :-) To me, subinterpreters still looks like an experimental feature.
[-]Fix PyGILState_Check() with _testcapi.run_in_subinterp()[/-][+]Disable PyGILState_Check() when Py_NewInterpreter() is called and add more checks on the GIL[/+]python-dev commentedon Mar 14, 2016
New changeset e590c632c9fa by Victor Stinner in branch 'default':
Add more checks on the GIL
https://hg.python.org/cpython/rev/e590c632c9fa
New changeset cde3d986da00 by Victor Stinner in branch 'default':
Check the GIL in PyObject_Malloc()
https://hg.python.org/cpython/rev/cde3d986da00
vstinner commentedon Mar 15, 2016
Ok, it looks like buildbots are happy. I close the issue.
python-dev commentedon Mar 15, 2016
New changeset b394fc71f92a by Victor Stinner in branch '3.5':
Fix Py_FatalError() if called without the GIL
https://hg.python.org/cpython/rev/b394fc71f92a
New changeset c298c6d8b324 by Victor Stinner in branch '3.5':
faulthandler: Test Py_FatalError() with GIL released
https://hg.python.org/cpython/rev/c298c6d8b324
vstinner commentedon Oct 31, 2018
New changeset 3a228ab by Victor Stinner in branch 'master':
bpo-26558: Fix Py_FatalError() with GIL released (GH-10267)
3a228ab
miss-islington commentedon Oct 31, 2018
New changeset 192c547 by Miss Islington (bot) in branch '3.7':
bpo-26558: Fix Py_FatalError() with GIL released (GH-10267)
192c547
vstinner commentedon Nov 1, 2018
New changeset ff56597 by Victor Stinner in branch '3.6':
bpo-26558: Fix Py_FatalError() with GIL released (GH-10267) (GH-10270)
ff56597