[Python-Dev] Segfault
Neal Norwitz
nnorwitz at gmail.com
Thu Aug 23 20:57:45 CEST 2007
On 8/23/07, Hrvoje Nikšić <hrvoje.niksic at avl.com> wrote:
> On Wed, 2007-08-22 at 21:32 -0700, Neal Norwitz wrote:
> > Py_BEGIN_ALLOW_THREADS
> > errno = 0;
> > - ret = _portable_fseek(f->f_fp, offset, whence);
> > + if (f->f_fp != NULL)
> > + ret = _portable_fseek(f->f_fp, offset, whence);
>
> Doesn't this kind of code retain a race condition? Since this is an
Exactly what I'm thinking. That's why I said:
I'm not convinced the attached patch is good enough though.
It definitely reduces the race and might fix the problem.
> "allow threads" section that runs with the GIL released, file_close
> might acquire the GIL and be running in parallel to this code. If
> file_close sets f_fp to NULL after the "if" condition evaluates, but
> before the call to _portable_fseek completes, we still get a segfault.
However, the setting of f_fp to NULL happens with the GIL set, ie
while only one thread is running. So I *think* (but I'm not sure) the
condition you mention is not possible. Either way the fix seems
brittle. (Also, the patch I attached was not complete.)
Also all this code has gone away in 3.0.
n
More information about the Python-Dev
mailing list