If I did the following in an infinite loop, would the host system/user
account soon run out of file descriptors?  (I'm thinking no, since I'd
imagine that a file object has a __del__-like method that will call
close() automatically since it goes out of scope):

    open('/home/rutt/.bashrc,'r').read()

Can anyone confirm that I'm right in seeing (1) the file object's
actual destructor is below and seems to call a close method if not
already done (at the <-- indicated lines) and (2) the method table
that makes this method the destructor?  Both are in
Objects/fileobject.c in python sources.

(1)
static void
file_dealloc(PyFileObject *f)
{
        if (f->f_fp != NULL && f->f_close != NULL) { <----
                Py_BEGIN_ALLOW_THREADS               
                (*f->f_close)(f->f_fp);              <----
                Py_END_ALLOW_THREADS
        }
        Py_XDECREF(f->f_name);
        Py_XDECREF(f->f_mode);
        Py_XDECREF(f->f_encoding);
        drop_readahead(f);
        f->ob_type->tp_free((PyObject *)f);
}


(2)
PyTypeObject PyFile_Type = {
        PyObject_HEAD_INIT(&PyType_Type)
        0,
        "file",
        sizeof(PyFileObject),
        0,
        (destructor)file_dealloc,               /* tp_dealloc */  <----
        0,                                      /* tp_print */
        0,                                      /* tp_getattr */
        0,                                      /* tp_setattr */
        0,                                      /* tp_compare */
        (reprfunc)file_repr,                    /* tp_repr */
        0,                                      /* tp_as_number */
[...]

Thanks,
-- 
Benjamin Rutt
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to