Fix some memory leak or valgrind suppressions 68/11768/2
Clément DAVID [Thu, 20 Jun 2013 11:20:21 +0000 (13:20 +0200)]
Change-Id: I0c755dcf339ee22b4d20cba61bf24add3f16ba50

scilab/bin/scilab
scilab/modules/console/src/c/cmdLine/cliPrompt.c
scilab/modules/hdf5/sci_gateway/cpp/sci_import_from_hdf5.cpp
scilab/modules/hdf5/sci_gateway/cpp/sci_listvar_in_hdf5.cpp
scilab/modules/hdf5/src/c/h5_readDataFromFile.c
scilab/tools/profiling/valgrind.supp

index 3f79cda..b2d7484 100755 (executable)
@@ -78,7 +78,7 @@ start_debug_kdbg() {
 }
 
 start_profiling() {
-    VALGRIND_OPTIONS=" --show-below-main=yes --num-callers=12 --demangle=yes --leak-check=full --show-reachable=yes --smc-check=all --db-attach=yes --gen-suppressions=all -v --trace-redir=yes --show-below-main=yes --track-origins=yes --suppressions=$SCI/tools/profiling/valgrind.supp $SCILAB_VALGRIND_OPT"
+    VALGRIND_OPTIONS=" --show-below-main=yes --num-callers=12 --demangle=yes --leak-check=full --show-reachable=yes --smc-check=all --db-attach=yes --gen-suppressions=all --show-below-main=yes --track-origins=yes --suppressions=$SCI/tools/profiling/valgrind.supp $SCILAB_VALGRIND_OPT"
     if test -n "$DEVENV"; then
         echo "Running profiling of Scilab  : " "$SCI"/libtool --mode=execute valgrind $VALGRIND_OPTIONS "$SCILABBIN" "$@"
         "$SCI"/libtool --mode=execute valgrind $VALGRIND_OPTIONS "$SCILABBIN" "$@"
index e6b3933..41063d4 100644 (file)
@@ -31,6 +31,7 @@ int printPrompt(int token)
 {
     char * prompt = (char*)malloc(sizeof(char) * (PROMPT_SIZE_MAX + 1));
     char * tmpPrompt = GetTemporaryPrompt();
+    int promptLen;
 
     /* Retrieve the prompt. It can be different if the pause mode is enabled */
     GetCurrentPrompt(prompt);
@@ -49,5 +50,8 @@ int printPrompt(int token)
         setCharDisplay(DISP_LAST_SET);
         fflush(stdout);
     }
-    return strlen(prompt);
+    promptLen = strlen(prompt);
+    free(prompt);
+    return promptLen;
 }
+
index 4ebab38..809282f 100644 (file)
@@ -349,12 +349,14 @@ static bool import_double(int _iDatasetId, int _iItemPos, int *_piAddress, char
 
             if (iRet)
             {
+                FREE(piDims);
                 return false;
             }
         }
         else if (iDims > 2)
         {
             //hypermatrix
+            FREE(piDims);
             return false;
         }
     }
@@ -402,6 +404,7 @@ static bool import_double(int _iDatasetId, int _iItemPos, int *_piAddress, char
         return false;
     }
 
+    FREE(piDims);
     if (pdblReal)
     {
         FREE(pdblReal);
@@ -444,6 +447,7 @@ static bool import_string(int _iDatasetId, int _iItemPos, int *_piAddress, char
     iRet = readStringMatrix(_iDatasetId, pstData);
     if (iRet)
     {
+        FREE(piDims);
         return false;
     }
 
@@ -462,6 +466,7 @@ static bool import_string(int _iDatasetId, int _iItemPos, int *_piAddress, char
         return false;
     }
 
+    FREE(piDims);
     FREE(pstData);
 
     return true;
@@ -708,6 +713,8 @@ static bool import_boolean(int _iDatasetId, int _iItemPos, int *_piAddress, char
         iRet = readBooleanMatrix(_iDatasetId, piData);
         if (iRet)
         {
+            FREE(piData);
+            FREE(piDims);
             return false;
         }
     }
@@ -724,9 +731,15 @@ static bool import_boolean(int _iDatasetId, int _iItemPos, int *_piAddress, char
     if (sciErr.iErr)
     {
         printError(&sciErr, 0);
+        FREE(piDims);
+        if (piData)
+        {
+            FREE(piData);
+        }
         return false;
     }
 
+    FREE(piDims);
     if (piData)
     {
         FREE(piData);
index 2ce6b96..b6bed32 100644 (file)
@@ -39,7 +39,11 @@ typedef struct __VAR_INFO__
     int iDims;
     int piDims[2];
 
-    __VAR_INFO__() : iType(0), iSize(0), iDims(0) {}
+    __VAR_INFO__() : iType(0), iSize(0), iDims(0)
+    {
+        memset(pstInfo, 0, sizeof(pstInfo) / sizeof(pstInfo[0]));
+        memset(varName, 0, sizeof(varName) / sizeof(varName[0]));
+    }
 } VarInfo;
 
 static bool read_data(int _iDatasetId, int _iItemPos, int *_piAddress, VarInfo* _pInfo);
@@ -152,6 +156,8 @@ int sci_listvar_in_hdf5(char *fname, unsigned long fname_len)
                 sciprint("%s\n", pInfo[i].pstInfo);
             }
         }
+
+        FREE(pstVarNameList);
     }
     else
     {
index 159eaa9..6314ebb 100644 (file)
@@ -290,6 +290,7 @@ int getDatasetInfo(int _iDatasetId, int* _iComplex, int* _iDims, int* _piDims)
             iSize *= _piDims[i];
         }
 
+        FREE(dims);
     }
     else
     {
index 1c67df9..f6907b3 100644 (file)
    obj:*
    obj:*
 }
+{
+   Last getCmdLine free issue
+   Memcheck:Leak
+   fun:malloc
+   fun:getCmdLine
+   fun:getCommandLine
+   fun:watchGetCommandLine
+   fun:start_thread
+   fun:clone
+}
+{
+   Fixeable but crash-ed using javasci
+   Memcheck:Leak
+   fun:malloc
+   fun:wide_string_to_UTF8
+   fun:getCmdLine
+   fun:getCommandLine
+   fun:watchGetCommandLine
+   fun:start_thread
+   fun:clone
+}