Kristján Valur Jónsson added the comment:
My quick and dirty fix is simple:
_PyOS_ReadlineTState = PyThreadState_GET();
/* CCP change, cannot release the GIL here because PyOS_StdioReadline uses
* the regular MALLOC
*/
/*
Py_BEGIN_ALLOW_THREADS
*/
#ifdef WITH_THREAD
PyThread_acquire_lock(_PyOS_ReadlineLock, 1);
#endif
/* This is needed to handle the unlikely case that the
* interpreter is in interactive mode *and* stdin/out are not
* a tty. This can happen, for example if python is run like
* this: python -i < test1.py
*/
if (!isatty (fileno (sys_stdin)) || !isatty (fileno (sys_stdout)))
rv = PyOS_StdioReadline (sys_stdin, sys_stdout, prompt);
else
rv = (*PyOS_ReadlineFunctionPointer)(sys_stdin, sys_stdout,
prompt);
/*
Py_END_ALLOW_THREADS
*/
#ifdef WITH_THREAD
PyThread_release_lock(_PyOS_ReadlineLock);
#endif
Basically, we just comment out the lock release since we don't need it. The
reason we found this was that we were using GIL a custom mallocator which
should have been run with the GIL but wasn´t.
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue16742>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com