Fix leaks and invalid memory accesses
[lttv.git] / lttv / lttv / sync / event_analysis_eval.c
index 88d732bb4bbace6ec012a687a3f3faf49776db7b..0c8e0497abafdd42f8de9aa23d97f8cd3e649fe6 100644 (file)
@@ -150,7 +150,6 @@ static AnalysisModule analysisModuleEval= {
 static ModuleOption optionEvalRttFile= {
        .longName= "eval-rtt-file",
        .hasArg= REQUIRED_ARG,
-       {.arg= NULL},
        .optionHelp= "specify the file containing RTT information",
        .argHelp= "FILE",
 };
@@ -309,7 +308,7 @@ static AnalysisHistogramEval* constructAnalysisHistogramEval(const char* const
        convertIP(saddr, rttKey->saddr);
        convertIP(daddr, rttKey->daddr);
 
-       cwd= changeToGraphDir(graphsDir);
+       cwd= changeToGraphsDir(graphsDir);
 
        for (i= 0; i < sizeof(loopValues) / sizeof(*loopValues); i++)
        {
@@ -585,7 +584,7 @@ static void destroyAnalysisEval(SyncState* const syncState)
                        for (j= 0; j < i; j++)
                        {
                                // There seems to be a memory leak in glpk, valgrind reports a
-                               // loss even if the problem is deleted
+                               // loss (reachable) even if the problem is deleted
                                glp_delete_prob(graphs->lps[i][j]);
                        }
                        free(graphs->lps[i]);
@@ -1742,20 +1741,23 @@ static void finalizeAnalysisEvalLP(SyncState* const syncState)
        unsigned int i, j;
        AnalysisDataEval* analysisData= syncState->analysisData;
        AnalysisDataCHull* chAnalysisData= analysisData->chullSS->analysisData;
-       FactorsCHull** lpFactorsArray= createAllFactors(syncState->traceNb);
-       FactorsCHull* lpFactors;
+       FactorsCHull** lpFactorsArray;
 
        if (!syncState->stats && !syncState->graphsStream)
        {
                return;
        }
 
+       /* Because of matching_distributor, this analysis may be called twice.
+        * Only run it once */
        if ((syncState->graphsStream && analysisData->graphs->lps != NULL) ||
                (syncState->stats && analysisData->stats->chFactorsArray != NULL))
        {
                return;
        }
 
+       lpFactorsArray= createAllFactors(syncState->traceNb);
+
        if (syncState->stats)
        {
                analysisData->stats->chFactorsArray=
@@ -1795,7 +1797,6 @@ static void finalizeAnalysisEvalLP(SyncState* const syncState)
                        else
                        {
                                glp_delete_prob(lp);
-                               destroyFactorsCHull(lpFactors);
                        }
                }
        }
@@ -1846,7 +1847,7 @@ static void writeAnalysisTraceTimeBackPlotsEval(SyncState* const syncState,
                snprintf(fileName, 40, "analysis_eval_accuracy-%03u_and_%03u.data", i, j);
                fileName[sizeof(fileName) - 1]= '\0';
 
-               cwd= changeToGraphDir(syncState->graphsDir);
+               cwd= changeToGraphsDir(syncState->graphsDir);
 
                if ((fp= fopen(fileName, "w")) == NULL)
                {
This page took 0.02357 seconds and 4 git commands to generate.