On Mon, 2007-08-20 at 20:27 +0200, Maciej Fijalkowski wrote:
> import thread
> 
> while 1:
>     f = open("/tmp/dupa", "w")
>     thread.start_new_thread(f.close, ())
>     f.close()

file_close inadvertently allows fclose to be called twice on the same
stdio file.  This patch should fix the problem:

Python-2.5.1/Objects/fileobject.c
--- Python-2.5.1.orig/Objects/fileobject.c      2007-01-23 14:54:30.000000000 
+0100
+++ Python-2.5.1/Objects/fileobject.c   2007-08-21 10:04:18.000000000 +0200
@@ -440,13 +440,14 @@
 {
        int sts = 0;
        if (f->f_fp != NULL) {
+               FILE *fp = f->f_fp;
+               f->f_fp = NULL;
                if (f->f_close != NULL) {
                        Py_BEGIN_ALLOW_THREADS
                        errno = 0;
-                       sts = (*f->f_close)(f->f_fp);
+                       sts = (*f->f_close)(fp);
                        Py_END_ALLOW_THREADS
                }
-               f->f_fp = NULL;
        }
        PyMem_Free(f->f_setbuf);
        f->f_setbuf = NULL;


_______________________________________________
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

Reply via email to