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 "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. If I understand the Python threading model, the only reliable way to resolve this is to protect the PyFileObject operations with a mutex. _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com