Sfoglia il codice sorgente

Merge branch 'candidate-6.0.10' into candidate-6.2.0

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 8 anni fa
parent
commit
8e33ceff34

+ 2 - 0
ecl/hql/hqlgram2.cpp

@@ -9872,6 +9872,8 @@ void HqlGram::cloneInheritedAttributes(IHqlScope * scope, const attribute & errp
                 IIdAtom * id = syms.item(iSym).queryId();
                 IAtom * name = lower(id);
                 OwnedHqlExpr baseSym = curBase->lookupSymbol(id, LSFsharedOK|LSFfromderived, lookupCtx);
+                if (!baseSym)
+                    continue;
                 OwnedHqlExpr match  = scope->lookupSymbol(id, LSFsharedOK|LSFignoreBase, lookupCtx);
 
                 LinkedHqlExpr mapped = baseSym;

+ 37 - 0
ecl/regress/xmodule.eclxml

@@ -0,0 +1,37 @@
+<Archive useArchivePlugins="1">
+<!--
+
+    HPCC SYSTEMS software Copyright (C) 2016 HPCC Systems®.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+ <Module name="common">
+  <Attribute name="m1">
+export m1 := module,forward
+export unsigned level1 := 10;// + m2.levela;
+    end;
+  </Attribute>
+  <Attribute name="m2">
+export m2 := module
+export unsigned levela := syntaxerror10;
+    end;
+  </Attribute>
+ </Module>
+ <Query>
+    import common;
+    m := MODULE(common)
+       export z := 3;
+    END;
+ output(m);
+ </Query>
+</Archive>

+ 19 - 12
thorlcr/activities/csvread/thcsvrslave.cpp

@@ -104,17 +104,20 @@ class CCsvReadSlaveActivity : public CDiskReadSlaveActivityBase
             CDiskPartHandlerBase::open();
             readFinished = false;
 
+            OwnedIFileIO partFileIO;
+            if (compressed)
+            {
+                partFileIO.setown(createCompressedFileReader(iFile, activity.eexp));
+                if (!partFileIO)
+                    throw MakeActivityException(&activity, 0, "Failed to open block compressed file '%s'", filename.get());
+                checkFileCrc = false;
+            }
+            else
+                partFileIO.setown(iFile->open(IFOread));
+
             {
                 CriticalBlock block(statsCs);
-                if (compressed)
-                {
-                    iFileIO.setown(createCompressedFileReader(iFile, activity.eexp));
-                    if (!iFileIO)
-                        throw MakeActivityException(&activity, 0, "Failed to open block compressed file '%s'", filename.get());
-                    checkFileCrc = false;
-                }
-                else
-                    iFileIO.setown(iFile->open(IFOread));
+                iFileIO.setown(partFileIO.getClear());
             }
 
             inputStream.setown(createFileSerialStream(iFileIO));
@@ -146,9 +149,13 @@ class CCsvReadSlaveActivity : public CDiskReadSlaveActivityBase
         }
         virtual void close(CRC32 &fileCRC)
         {
-            CriticalBlock block(statsCs);
-            mergeStats(fileStats, iFileIO);
-            iFileIO.clear();
+            Owned<IFileIO> partFileIO;
+            {
+                CriticalBlock block(statsCs);
+                partFileIO.setown(iFileIO.getClear());
+            }
+            mergeStats(fileStats, partFileIO);
+            partFileIO.clear();
             inputStream.clear();
             fileCRC = inputCRC;
         }

+ 19 - 9
thorlcr/activities/diskread/thdiskreadslave.cpp

@@ -226,12 +226,12 @@ void CDiskRecordPartHandler::open()
         rwFlags |= rw_grouped;
 
     {
-        CriticalBlock block(statsCs);
+        Owned<IExtRowStream> partStream;
         if (compressed)
         {
             rwFlags |= rw_compress;
-            in.setown(createRowStream(iFile, activity.queryDiskRowInterfaces(), rwFlags, activity.eexp));
-            if (!in.get())
+            partStream.setown(createRowStream(iFile, activity.queryDiskRowInterfaces(), rwFlags, activity.eexp));
+            if (!partStream.get())
             {
                 if (!blockCompressed)
                     throw MakeStringException(-1,"Unsupported compressed file format: %s", filename.get());
@@ -240,7 +240,12 @@ void CDiskRecordPartHandler::open()
             }
         }
         else
-            in.setown(createRowStream(iFile, activity.queryDiskRowInterfaces(), rwFlags));
+            partStream.setown(createRowStream(iFile, activity.queryDiskRowInterfaces(), rwFlags));
+
+        {
+            CriticalBlock block(statsCs);
+            in.setown(partStream.getClear());
+        }
     }
 
     if (!in)
@@ -263,11 +268,16 @@ void CDiskRecordPartHandler::open()
 
 void CDiskRecordPartHandler::close(CRC32 &fileCRC)
 {
-    CriticalBlock block(statsCs);
-    if (in) 
-        in->stop(&fileCRC);
-    mergeStats(fileStats, in);
-    in.clear();
+    Owned<IExtRowStream> partStream;
+    {
+        CriticalBlock block(statsCs);
+        partStream.setown(in.getClear());
+    }
+    if (partStream)
+    {
+        partStream->stop(&fileCRC);
+        mergeStats(fileStats, partStream);
+    }
 }
 
 /////////////////////////////////////////////////

+ 3 - 1
thorlcr/activities/thdiskbaseslave.cpp

@@ -363,9 +363,11 @@ void CDiskWriteSlaveActivityBase::open()
     if (diskHelperBase->getFlags() & TDXtemporary)
         twFlags |= TW_Temporary;
 
+    Owned<IFileIO> partOutputIO = createMultipleWrite(this, *partDesc, diskRowMinSz, twFlags, compress, ecomp, this, &abortSoon, (external&&!query) ? &tempExternalName : NULL);
+
     {
         CriticalBlock block(statsCs);
-        outputIO.setown(createMultipleWrite(this, *partDesc, diskRowMinSz, twFlags, compress, ecomp, this, &abortSoon, (external&&!query) ? &tempExternalName : NULL));
+        outputIO.setown(partOutputIO.getClear());
     }
 
     if (compress)

+ 18 - 12
thorlcr/activities/xmlread/thxmlreadslave.cpp

@@ -68,17 +68,20 @@ class CXmlReadSlaveActivity : public CDiskReadSlaveActivityBase
         {
             CDiskPartHandlerBase::open();
 
+            OwnedIFileIO partFileIO;
+            if (compressed)
+            {
+                partFileIO.setown(createCompressedFileReader(iFile, activity.eexp));
+                if (!partFileIO)
+                    throw MakeActivityException(&activity, 0, "Failed to open block compressed file '%s'", filename.get());
+                checkFileCrc = false;
+            }
+            else
+                partFileIO.setown(iFile->open(IFOread));
+
             {
                 CriticalBlock block(statsCs);
-                if (compressed)
-                {
-                    iFileIO.setown(createCompressedFileReader(iFile, activity.eexp));
-                    if (!iFileIO)
-                        throw MakeActivityException(&activity, 0, "Failed to open block compressed file '%s'", filename.get());
-                    checkFileCrc = false;
-                }
-                else
-                    iFileIO.setown(iFile->open(IFOread));
+                iFileIO.setown(partFileIO.getClear());
             }
 
             Owned<IIOStream> stream = createIOStream(iFileIO);
@@ -96,7 +99,6 @@ class CXmlReadSlaveActivity : public CDiskReadSlaveActivityBase
         }
         virtual void close(CRC32 &fileCRC)
         {
-            CriticalBlock block(statsCs);
             xmlParser.clear();
             inputIOstream.clear();
             if (checkFileCrc)
@@ -104,8 +106,12 @@ class CXmlReadSlaveActivity : public CDiskReadSlaveActivityBase
                 fileCRC.reset(~crcStream->queryCrc()); // MORE should prob. change stream to use CRC32
                 crcStream.clear();
             }
-            mergeStats(fileStats, iFileIO);
-            iFileIO.clear();
+            Owned<IFileIO> partFileIO;
+            {
+                CriticalBlock block(statsCs);
+                partFileIO.setown(iFileIO.getClear());
+            }
+            mergeStats(fileStats, partFileIO);
         }
 
         const void *nextRow()