webapp: open cursors less often
authorHelmut Grohne <helmut@subdivi.de>
Wed, 11 Sep 2013 06:35:41 +0000 (08:35 +0200)
committerHelmut Grohne <helmut@subdivi.de>
Wed, 11 Sep 2013 06:35:41 +0000 (08:35 +0200)
On the main instance opening cursors equals initiating a connection.
Unfortunately sqlite3.Connection.close does not close filedescriptors.
So just open less cursors to leak filedescriptors less often.

webapp.py

index 4478ba0..665ac23 100755 (executable)
--- a/webapp.py
+++ b/webapp.py
@@ -166,6 +166,7 @@ class Application(object):
         cursize = -1
         files = dict()
         minmatch = 2 if pid1 == pid2 else 1
         cursize = -1
         files = dict()
         minmatch = 2 if pid1 == pid2 else 1
+        cur2 = self.db.cursor()
         for cid, filename, size, hashvalue in fetchiter(cur):
             if cursize != size:
                 for entry in files.values():
         for cid, filename, size, hashvalue in fetchiter(cur):
             if cursize != size:
                 for entry in files.values():
@@ -181,13 +182,12 @@ class Application(object):
             entry = dict(filenames=set((filename,)), size=size, matches={})
             files[hashvalue] = entry
 
             entry = dict(filenames=set((filename,)), size=size, matches={})
             files[hashvalue] = entry
 
-            cur2 = self.db.cursor()
             cur2.execute("SELECT fa.name, ha.hash, fb.name, filename FROM hash AS ha JOIN hash AS hb ON ha.hash = hb.hash JOIN content ON hb.cid = content.id JOIN function AS fa ON ha.fid = fa.id JOIN function AS fb ON hb.fid = fb.id WHERE ha.cid = ? AND pid = ?;",
                          (cid, pid2))
             for func1, hashvalue, func2, filename in fetchiter(cur2):
                 entry["matches"].setdefault(filename, {})[func1, func2] = \
                         hashvalue
             cur2.execute("SELECT fa.name, ha.hash, fb.name, filename FROM hash AS ha JOIN hash AS hb ON ha.hash = hb.hash JOIN content ON hb.cid = content.id JOIN function AS fa ON ha.fid = fa.id JOIN function AS fb ON hb.fid = fb.id WHERE ha.cid = ? AND pid = ?;",
                          (cid, pid2))
             for func1, hashvalue, func2, filename in fetchiter(cur2):
                 entry["matches"].setdefault(filename, {})[func1, func2] = \
                         hashvalue
-            cur2.close()
+        cur2.close()
         cur.close()
 
         for entry in files.values():
         cur.close()
 
         for entry in files.values():