fix hdf5 locked file by listvar_in_hdf5 and import_from_hdf5 functions 61/10561/1
Antoine ELIAS [Thu, 21 Feb 2013 17:06:47 +0000 (18:06 +0100)]
Change-Id: I0b14e85f6597f683b95c547a52cfd5e67a1abec6

scilab/modules/hdf5/sci_gateway/cpp/sci_listvar_in_hdf5.cpp
scilab/modules/hdf5/src/c/h5_readDataFromFile.c

index 0b46f18..9c3bc90 100644 (file)
@@ -141,7 +141,6 @@ int sci_listvar_in_hdf5(char *fname, unsigned long fname_len)
             strcpy(pInfo[i].varName, pstVarNameList[i]);
             FREE(pstVarNameList[i]);
             b = read_data(iDataSetId, 0, NULL, &pInfo[i]) == false;
-            closeDataSet(iDataSetId);
             if (b)
             {
                 break;
@@ -319,6 +318,7 @@ static bool read_double(int _iDatasetId, int _iItemPos, int *_piAddress, VarInfo
     _pInfo->iSize = (2 + (iSize * (iComplex + 1))) * 8;
 
     generateInfo(_pInfo, "constant");
+    closeDataSet(_iDatasetId);
     return true;
 }
 
@@ -359,6 +359,7 @@ static bool read_boolean(int _iDatasetId, int _iItemPos, int *_piAddress, VarInf
     _pInfo->iSize = (3 + iSize) * 4;
 
     generateInfo(_pInfo, "boolean");
+    closeDataSet(_iDatasetId);
     return true;
 }
 
@@ -375,6 +376,7 @@ static bool read_integer(int _iDatasetId, int _iItemPos, int *_piAddress, VarInf
     _pInfo->iSize = 16 + iSize * (iPrec % 10);
 
     generateInfo(_pInfo, "integer");
+    closeDataSet(_iDatasetId);
     return true;
 }
 
@@ -400,6 +402,7 @@ static bool read_sparse(int _iDatasetId, int _iItemPos, int *_piAddress, VarInfo
     _pInfo->iSize = 20 + iRows * 4 + iNbItem * 4 + (iNbItem * (iComplex + 1) * 8);
 
     generateInfo(_pInfo, "sparse");
+    closeDataSet(_iDatasetId);
     return true;
 }
 
@@ -423,6 +426,7 @@ static bool read_boolean_sparse(int _iDatasetId, int _iItemPos, int *_piAddress,
     _pInfo->iSize = 20 + iRows * 4 + iNbItem * 4;
 
     generateInfo(_pInfo, "boolean sparse");
+    closeDataSet(_iDatasetId);
     return true;
 }
 
@@ -536,18 +540,27 @@ static bool read_list(int _iDatasetId, int _iVarType, int _iItemPos, int *_piAdd
         generateInfo(_pInfo, "mlist");
     }
 
+    iRet = deleteListItemReferences(_iDatasetId, piItemRef);
+    if (iRet)
+    {
+        return false;
+    }
+
+
     return true;
 }
 
 static bool read_void(int _iDatasetId, int _iItemPos, int *_piAddress, VarInfo* _pInfo)
 {
     _pInfo->iSize = 1;
+    closeDataSet(_iDatasetId);
     return true;
 }
 
 static bool read_undefined(int _iDatasetId, int _iItemPos, int *_piAddress, VarInfo* _pInfo)
 {
     _pInfo->iSize = 1;
+    closeDataSet(_iDatasetId);
     return true;
 }
 
index 43b4a74..e9ec59a 100644 (file)
@@ -924,6 +924,12 @@ int readCommonSparseComplexMatrix(int _iDatasetId, int _iComplex, int _iRows, in
         return -1;
     }
 
+    status = H5Dclose(_iDatasetId);
+    if (status < 0)
+    {
+        return -1;
+    }
+
     return 0;
 }
 
@@ -970,6 +976,12 @@ int readBooleanSparseMatrix(int _iDatasetId, int _iRows, int _iCols, int _iNbIte
             return -1;
         }
     }
+
+    status = H5Dclose(_iDatasetId);
+    if (status < 0)
+    {
+        return -1;
+    }
     return 0;
 }