浏览代码

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()
     {