Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Check if cnst->cnst_usage is NULL.
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Thu, 5 Jul 2012 20:29:31 +0000 (22:29 +0200)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Thu, 5 Jul 2012 20:34:22 +0000 (22:34 +0200)
Fixes a segfault in test-maxmin-usage.

src/surf/maxmin.c

index ba965ba..b8f4d10 100644 (file)
@@ -641,13 +641,15 @@ void lmm_solve(lmm_system_t sys)
           double_update(&(cnst->remaining), elem->value * var->value);
           double_update(&(cnst->usage), elem->value / var->weight);
           if(cnst->usage<=0 || cnst->remaining<=0) {
-            int index = (cnst->cnst_light-cnst_light_tab);
-            XBT_DEBUG("index: %d \t cnst_light_num: %d \t || \t cnst: %p \t cnst->cnst_light: %p \t cnst_light_tab: %p ",
-                index,cnst_light_num, cnst, cnst->cnst_light, cnst_light_tab);
-            cnst_light_tab[index]=cnst_light_tab[cnst_light_num-1];
-            cnst_light_tab[index].cnst->cnst_light = &cnst_light_tab[index];
-            cnst_light_num--;
-            cnst->cnst_light = NULL;
+            if (cnst->cnst_light) {
+              int index = (cnst->cnst_light-cnst_light_tab);
+              XBT_DEBUG("index: %d \t cnst_light_num: %d \t || \t cnst: %p \t cnst->cnst_light: %p \t cnst_light_tab: %p ",
+                  index,cnst_light_num, cnst, cnst->cnst_light, cnst_light_tab);
+              cnst_light_tab[index]=cnst_light_tab[cnst_light_num-1];
+              cnst_light_tab[index].cnst->cnst_light = &cnst_light_tab[index];
+              cnst_light_num--;
+              cnst->cnst_light = NULL;
+            }
           } else {
             cnst->cnst_light->remaining_over_usage = cnst->remaining / cnst->usage;
           }