فهرست منبع

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