Fix leaks and invalid memory accesses
[lttv.git] / lttv / lttv / sync / event_analysis_eval.c
index 29b1b4493009eabdb2552174a81d289689e1462b..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",
 };
@@ -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);
                        }
                }
        }
This page took 0.022835 seconds and 4 git commands to generate.