瀏覽代碼

Thor LOOP could deadlock on exception

LOOP would deadlock on exit, if an exception occured during the
thread that handled read ahead.
Jake Smith 13 年之前
父節點
當前提交
a595fc64be
共有 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()
     {