Kernel bbclass "too many open files" bugfix
authorJader H. Silva <jader@2mi.com.br>
Thu, 12 Mar 2009 13:10:12 +0000 (10:10 -0300)
committerMarcin Juszkiewicz <hrw@openembedded.org>
Thu, 12 Mar 2009 16:26:15 +0000 (17:26 +0100)
tempfile.mkstemp() is used to create a temporary file. This function
return a tuple with an OS file descriptor and a filename. Filename is
stored in "tmpfile" but descriptor is not stored anywhere, but it is
still open because it's only an integer to python so it is not closed at
the end of the function.

For each iteration in which this function is called, a new OS file
descriptor is opened, but not closed. The solution is to store the file
descriptor and close it.

classes/kernel.bbclass

index 86f00da..4c1dbda 100644 (file)
@@ -295,12 +295,14 @@ python populate_packages_prepend () {
        def extract_modinfo(file):
                import tempfile, os, re
                tempfile.tempdir = bb.data.getVar("WORKDIR", d, 1)
-               tmpfile = tempfile.mkstemp()[1]
+               tf = tempfile.mkstemp()
+               tmpfile = tf[1]
                cmd = "PATH=\"%s\" %sobjcopy -j .modinfo -O binary %s %s" % (bb.data.getVar("PATH", d, 1), bb.data.getVar("HOST_PREFIX", d, 1) or "", file, tmpfile)
                os.system(cmd)
                f = open(tmpfile)
                l = f.read().split("\000")
                f.close()
+               os.close(tf[0])
                os.unlink(tmpfile)
                exp = re.compile("([^=]+)=(.*)")
                vals = {}