STINNER Victor added the comment:

I just found the readline/GIL issue while working on #18203. I created #18205 
but then I found this issue. I just closed #18205 as a duplicate. Here is a 
patch for Python 3.4.

--

Copy of the initial message (msg191089):

The callback PyOS_ReadlineFunctionPointer (used to read a line from the 
standard input) must return a buffer allocated by PyMem_Malloc(), but 
PyOS_Readline() releases the GIL before calling PyOS_ReadlineFunctionPointer.

Simplified extract of PyOS_Readline():

    Py_BEGIN_ALLOW_THREADS
    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

tok_nextc() calls PyOS_Readline() and calls PyMem_FREE() to release its result.

PyOS_ReadlineFunctionPointer should allocate memory using malloc(), not using 
PyMem_Malloc(). But PyOS_Readline() should copy the line into a buffer 
allocated by PyMem_Malloc() to keep backward compatibility.

See also issue #18203 and #3329.

----------
keywords: +patch
nosy: +haypo
versions:  -Python 3.2
Added file: http://bugs.python.org/file30578/readline_gil.patch

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

Reply via email to