Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot//simgrid/simgrid
authorArnaud Legrand <arnaud.legrand@imag.fr>
Wed, 18 Feb 2015 09:05:16 +0000 (10:05 +0100)
committerArnaud Legrand <arnaud.legrand@imag.fr>
Wed, 18 Feb 2015 09:05:16 +0000 (10:05 +0100)
1  2 
src/surf/maxmin.cpp

diff --combined src/surf/maxmin.cpp
@@@ -431,6 -431,31 +431,31 @@@ lmm_variable_t lmm_get_var_from_cnst(lm
      return NULL;
  }
  
+ //if we modify the swag between calls, normal version may loop forever
+ //this safe version ensures that we browse the swag elements only once
+ lmm_variable_t lmm_get_var_from_cnst_safe(lmm_system_t /*sys*/,
+                                      lmm_constraint_t cnst,
+                                      lmm_element_t * elem,
+                                      lmm_element_t * nextelem,
+                                      int * numelem)
+ {
+   if (!(*elem)){
+     *elem = (lmm_element_t) xbt_swag_getFirst(&(cnst->element_set));
+     *numelem = xbt_swag_size(&(cnst->element_set))-1;
+   }else{
+     *elem = *nextelem;
+     if(*numelem>0){
+      (*numelem) --;
+     }else
+       return NULL;
+   }
+   if (*elem){
+     *nextelem = (lmm_element_t) xbt_swag_getNext(*elem, cnst->element_set.offset);
+     return (*elem)->variable;
+   }else
+     return NULL;
+ }
  void *lmm_constraint_id(lmm_constraint_t cnst)
  {
    return cnst->id;
@@@ -785,7 -810,7 +810,7 @@@ void lmm_solve(lmm_system_t sys
      saturated_constraint_set->pos = 0;
      int pos;
      for(pos=0; pos<cnst_light_num; pos++){
 -      xbt_assert(cnst_light_tab[pos].cnst->active_element_set.count>0, "Cannot saturate more a constraint that has no active element! You want to check the maxmin precision and possible rounding effects." );
 +      xbt_assert(cnst_light_tab[pos].cnst->active_element_set.count>0, "Cannot saturate more a constraint that has no active element! You may want to change the maxmin precision (--cfg=maxmin/precision:<new_value>) because of possible rounding effects.\n\tFor the record, the usage of this constraint is %g while the maxmin precision to which it is compared is %g.\n\tThe usage of the previous constraint is %g.", cnst_light_tab[pos].cnst->usage, sg_maxmin_precision, cnst_light_tab[pos-1].cnst->usage);
        saturated_constraint_set_update(
            cnst_light_tab[pos].remaining_over_usage,
            pos,