New submission from STINNER Victor <victor.stin...@haypocalc.com>:

_PyGILState_Init() initialize autoInterpreterState variable. This variable have 
to be set before the first call to PyGILState_Ensure().

The problem is that _PyGILState_Init() is called late: at the end of 
Py_InitializeEx(). It's called after initsite(), whereas initsite() may need to 
call _PyGILState_Init().

Example: add the following lines at the end of site.py:
---
import readline
import rlcompleter
readline.parse_and_bind("tab: complete")
raw_input("press TAB")
---
Run an interpreter and press TAB:
---
$ ./python
press TABpython: Python/pystate.c:595: PyGILState_Ensure: Assertion 
`autoInterpreterState' failed.
Abandon
---

Other example of functiions using _PyGILState_Init(): _PyObject_Dump() (useful 
for debug), sqlite module, os.popen*(), ctypes Python callbacks, etc.

I don't know the right place for _PyGILState_Init() in Py_InitializeEx(). 
_PyGILState_Init() calls the following functions:
 - PyThread_get_thread_ident()
 - PyThread_allocate_lock()
 - PyThread_acquire_lock()
 - PyThread_release_lock()
 - Py_FatalError() (on error)

None of these function use Python functions, so _PyGILState_Init() can be 
called very early. The earliest position is just after the call to 
PyThreadState_New(), before PyThreadState_Swap(). It tested it and it works 
correctly.

If _PyGILState_Init() is called before PyThreadState_Swap(), 
PyThreadState_Swap() can be simplified (it doesn't need to check if GIL is 
initialized or not). Attached patch implement that.

--

I hit this bug when I was debuging Python: I added a call to _PyObject_Dump() 
which stopped Python (assertion error) because the GIL was not initialized :-/

I already hitted this bug some weeks ago when I was working on the thread state 
preallocation when creating a new thread: #7544.

----------
files: gil_state_init-trunk.patch
keywords: patch
messages: 100432
nosy: haypo
severity: normal
status: open
title: Call _PyGILState_Init() earlier in Py_InitializeEx()
type: crash
versions: Python 2.7, Python 3.2
Added file: http://bugs.python.org/file16439/gil_state_init-trunk.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue8063>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to