瀏覽代碼

Merge pull request #675 from jakesmith/loopexceptionhandling

Thor LOOP could deadlock on exception
Reviewed-by: Gavin Halliday <ghalliday@hpccsystems.com>
Gavin Halliday 13 年之前
父節點
當前提交
9596bb02f8
共有 1 個文件被更改,包括 8 次插入3 次删除
  1. 8 3
      thorlcr/activities/loop/thloopslave.cpp

+ 8 - 3
thorlcr/activities/loop/thloopslave.cpp

@@ -62,9 +62,9 @@ public:
     void main()
     {
         stopped = false;
+        Linked<IRowWriter> writer = smartbuf->queryWriter();
         try
         {
-            Linked<IRowWriter> writer = smartbuf->queryWriter();
             while (!stopped)
             {
                 OwnedConstThorRow row = in->nextRow();
@@ -78,8 +78,6 @@ public:
                 }
                 writer->putRow(row.getClear());
             }
-            writer->flush();
-
             in->stop();
         }
         catch (IException *e)
@@ -87,6 +85,13 @@ public:
             ActPrintLog(activity, e, NULL);
             exception.setown(e);
         }
+        try { writer->flush(); }
+        catch (IException *e)
+        {
+            ActPrintLog(activity, e, "Exception in writer->flush");
+            if (!exception.get())
+                exception.setown(e);
+        }
     }
     virtual const void *nextRow()
     {