]> err.no Git - dak/commitdiff
Replace DBConn.reset() by something more robust.
authorTorsten Werner <twerner@debian.org>
Tue, 22 Mar 2011 20:05:58 +0000 (20:05 +0000)
committerTorsten Werner <twerner@debian.org>
Tue, 22 Mar 2011 20:05:58 +0000 (20:05 +0000)
Signed-off-by: Torsten Werner <twerner@debian.org>
daklib/contents.py
daklib/dbconn.py
tests/dbtest_multiproc.py

index b56a9c6ce322a5913c7d767b3b13ced8aae820ad..4a0b3ae25237fe8a0b63b25f284d9d0e31903a04 100755 (executable)
@@ -241,7 +241,6 @@ def generate_helper(suite_id, arch_id, overridetype_id, component_id = None):
     '''
     This function is called in a new subprocess.
     '''
-    DBConn().reset()
     session = DBConn().session()
     suite = Suite.get(suite_id, session)
     architecture = Architecture.get(arch_id, session)
@@ -308,15 +307,9 @@ class ContentsScanner(object):
         session.close()
         return { 'processed': processed, 'remaining': remaining }
 
-reset = False
-
 def scan_helper(binary_id):
     '''
     This function runs in a subprocess.
     '''
-    global reset
-    if not reset:
-        DBConn().reset()
-        reset = True
     scanner = ContentsScanner(binary_id)
     scanner.scan()
index 1968dd0c16a63ffdedab916e52d405b760f38484..bf77b2a7b50401eb6f3430dd8b77f96ab7583d97 100755 (executable)
@@ -3223,19 +3223,15 @@ class DBConn(object):
 
         self.__setuptables()
         self.__setupmappers()
+        self.pid = os.getpid()
 
     def session(self):
+        # reinitialize DBConn in new processes
+        if self.pid != os.getpid():
+            clear_mappers()
+            self.__createconn()
         return self.db_smaker()
 
-    def reset(self):
-        '''
-        Resets the DBConn object. This function must be called by subprocesses
-        created by the multiprocessing module. See tests/dbtest_multiproc.py
-        for an example.
-        '''
-        clear_mappers()
-        self.__createconn()
-
 __all__.append('DBConn')
 
 
index f4c2a37aea0f2ffee7060dd85e2d801bb79d0aea..04520208a2164f85d81735fe070d28f33bae7524 100755 (executable)
@@ -9,7 +9,6 @@ from time import sleep
 import unittest
 
 def read_number():
-    DBConn().reset()
     session = DBConn().session()
     result = session.query('foo').from_statement('select 7 as foo').scalar()
     sleep(0.1)
@@ -18,9 +17,7 @@ def read_number():
 
 class MultiProcTestCase(DBDakTestCase):
     """
-    This TestCase checks that DBConn works with multiprocessing. A fresh
-    subprocess needs to call reset() on DBConn(). See function read_number()
-    for an example.
+    This TestCase checks that DBConn works with multiprocessing.
     """
 
     def save_result(self, result):