]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/dakmultiprocessing.py
Fix exception handling in process-new.
[dak.git] / daklib / dakmultiprocessing.py
index 681755cc49c1f37e1458b7fbf008259e1bb480f3..8e66cfdb177342f94b7adcbac1c1c23e47674ba4 100644 (file)
@@ -26,6 +26,14 @@ multiprocessing for DAK
 ###############################################################################
 
 import multiprocessing
+import sqlalchemy.orm.session
+
+def _func_wrapper(func, *args, **kwds):
+    try:
+        return func(*args, **kwds)
+    finally:
+        # Make sure connections are closed. We might die otherwise.
+        sqlalchemy.orm.session.Session.close_all()
 
 class Pool():
     def __init__(self, *args, **kwds):
@@ -33,12 +41,16 @@ class Pool():
         self.results = []
 
     def apply_async(self, func, args=(), kwds={}, callback=None):
-        self.results.append(self.pool.apply_async(func, args, kwds, callback))
+        wrapper_args = list(args)
+        wrapper_args.insert(0, func)
+        self.results.append(self.pool.apply_async(_func_wrapper, wrapper_args, kwds, callback))
 
     def close(self):
         self.pool.close()
 
     def join(self):
         self.pool.join()
-        for r in self.results:
-            r.get()
+        #for r in self.results:
+        #    # return values were already handled in the callbacks, but asking
+        #    # for them might raise exceptions which would otherwise be lost
+        #    r.get()