]> rtime.felk.cvut.cz Git - frescor/fwp.git/commitdiff
Utilization is updated even on contract cancellation
authorMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 10 Jul 2008 10:22:33 +0000 (12:22 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 10 Jul 2008 10:22:33 +0000 (12:22 +0200)
Admission test have to be called without a new contract

fwp/mngr/admtest_utilization.c
fwp/mngr/fwp_mngr.c

index a466f09029ab8534eb2bb97ae45f62ceb3f208cf..74940026acb8293a5881e9e138190b2ba4ef0aed 100644 (file)
@@ -153,29 +153,31 @@ void fwp_admctrl_utilization(fwp_contract_data_t *contdata_new)
                utilization += (long long)(duration_usec * 10000) / contract->period_usec;
        }
 
-       if (utilization >= 10000 * 96/100) {
-               contdata_new->status = FWP_CONT_NOTNEGOTIATED;
-       } else {
-               struct fwp_contract *c = &contdata_new->contract;
-               int d = c->deadline_usec;
-               if (d <= 0) d = 100*1000*1000;
-               if (d < 50000) {
+       if (contdata_new) {
+               if (utilization >= 10000 * 96/100) {
                        contdata_new->status = FWP_CONT_NOTNEGOTIATED;
                } else {
-                       contdata_new->status = FWP_CONT_RESERVED;
-               }
+                       struct fwp_contract *c = &contdata_new->contract;
+                       int d = c->deadline_usec;
+                       if (d <= 0) d = 100*1000*1000;
+                       if (d < 50000) {
+                               contdata_new->status = FWP_CONT_NOTNEGOTIATED;
+                       } else {
+                               contdata_new->status = FWP_CONT_RESERVED;
+                       }
 
-               contdata_new->vres_params.ac_id =
-                       d <  100*1000 ? FWP_AC_VO :
-                       d <  500*1000 ? FWP_AC_VI :
-                       d < 1000*1000 ? FWP_AC_BE :
-                                       FWP_AC_BK;
-               contdata_new->vres_params.budget = c->budget;
-               contdata_new->vres_params.period_usec = c->period_usec; 
+                       contdata_new->vres_params.ac_id =
+                               d <  100*1000 ? FWP_AC_VO :
+                               d <  500*1000 ? FWP_AC_VI :
+                               d < 1000*1000 ? FWP_AC_BE :
+                               FWP_AC_BK;
+                       contdata_new->vres_params.budget = c->budget;
+                       contdata_new->vres_params.period_usec = c->period_usec; 
+               }
        }
 
        /* Update utilization for GUI */
-       if (contdata_new->status == FWP_CONT_RESERVED) {
+       if (contdata_new == NULL || contdata_new->status == FWP_CONT_RESERVED) {
                fwp_reserved_utilization = utilization;
        }
 }
index 30f12d5febdc28cf1255a2c4b2e5cda1d0b2865e..43dd045f3eda78c388b862ca93b41ffa95b1c1a4 100644 (file)
@@ -236,6 +236,9 @@ fwp_mngr_contract_cancel(fwp_msgb_t *msgb, fwp_participant_id_t participant_id)
        /* delete contract from contract table */
        fwp_contract_table_delete(&participant->contract_table, contdata);
        fwp_contract_destroy(contdata);
+
+       /* Update admission data (only necessary for demo and GUI) */
+       fwp_admctrl_test(NULL);         
        
        FWP_DEBUG("Contract id=%d to canceled\n", id);