summaryrefslogtreecommitdiff
path: root/cesar/cp2
diff options
context:
space:
mode:
authorboure2008-07-18 08:37:29 +0000
committerboure2008-07-18 08:37:29 +0000
commit6bf1fb54b720f595550db92dc1a45fcf3c07ea10 (patch)
tree11f27314350a316be4af53f3c7e394bdab10fa43 /cesar/cp2
parentefefce584e2059647f0509a181cdcae70449ff32 (diff)
Memorry release pbs resolved
git-svn-id: svn+ssh://pessac/svn/cesar/trunk@2628 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar/cp2')
-rw-r--r--cesar/cp2/cco/bw/src/bw.c25
-rw-r--r--cesar/cp2/cco/bw/src/bw_prio_heap.c1
-rw-r--r--cesar/cp2/cco/bw/test/src/bw_test.c175
3 files changed, 128 insertions, 73 deletions
diff --git a/cesar/cp2/cco/bw/src/bw.c b/cesar/cp2/cco/bw/src/bw.c
index 203a27dd51..a1285f5110 100644
--- a/cesar/cp2/cco/bw/src/bw.c
+++ b/cesar/cp2/cco/bw/src/bw.c
@@ -1,4 +1,4 @@
- /* Cesar project {{{
+/* Cesar project {{{
*
* Copyright (C) 2008 Spidcom
*
@@ -129,10 +129,11 @@ cp_cco_bw_alloc_sched (cp_t *ctx)
conn = cp_conn_get_conn(ctx, prior_conn->cid);
/* Allocation of the Forward link*/
- no_more_alloc = cp_cco_bw_alloc_link(ctx, conn->flink, conn->conn_info.cid);
+ if(conn->flink->cinfo->valid_cinfo)
+ no_more_alloc = cp_cco_bw_alloc_link(ctx, conn->flink, conn->conn_info.cid);
/* Allocation of the Reverse link */
- if(no_more_alloc)
+ if(no_more_alloc && conn->rlink->cinfo->valid_cinfo)
no_more_alloc = cp_cco_bw_alloc_link(ctx, conn->rlink, conn->conn_info.cid);
/*Change Status if the allocation has been done*/
@@ -802,7 +803,6 @@ cp_cco_bw_alloc_proxy (cp_t *ctx)
cp_cco_bw_set_next_free_time_space(ctx, &prev_alloc, &next_alloc);
/*Schedule the Proxy beacons*/
-
avln = cp_sta_mgr_get_our_avln(ctx);
sta = cp_net_get_first(ctx, avln, CP_STA_STATE_ASSOCIATED);
@@ -821,19 +821,16 @@ cp_cco_bw_alloc_proxy (cp_t *ctx)
proxy_alloc->duration_persistence = 0;
cp_cco_bw_alloc_add(ctx, proxy_alloc);
- }
- tmp_sta = cp_net_get_next_sta(ctx, avln, sta);
- blk_release(sta);
- sta = tmp_sta;
-
- if(sta)
- {
begin_alloc = end_alloc;
end_alloc = end_alloc + CP_CCO_BW_ALLOC_TIME_BEACON_ATU;
}
- }
+ tmp_sta = cp_net_get_next_sta(ctx, avln, sta);
+ slab_release(sta);
+
+ sta = tmp_sta;
+ }
}
void
@@ -920,11 +917,11 @@ cp_cco_bw_get_next_alloc (cp_t *ctx, cp_cco_bw_alloc_t *prev_alloc)
alloc = PARENT_OF(cp_cco_bw_alloc_t, node,
list_next(&prev_alloc->node));
- while(&alloc->node != list_rbegin(&ctx->bw.finalised_schedule)
+ while(alloc && &alloc->node != list_rbegin(&ctx->bw.finalised_schedule)
&& alloc->persistence != prev_alloc->persistence)
alloc = cp_cco_bw_get_next_alloc(ctx, alloc);
- if(alloc->persistence != prev_alloc->persistence)
+ if(alloc && alloc->persistence != prev_alloc->persistence)
alloc = NULL;
return alloc;
diff --git a/cesar/cp2/cco/bw/src/bw_prio_heap.c b/cesar/cp2/cco/bw/src/bw_prio_heap.c
index a6bab73832..924fe2d0ce 100644
--- a/cesar/cp2/cco/bw/src/bw_prio_heap.c
+++ b/cesar/cp2/cco/bw/src/bw_prio_heap.c
@@ -61,7 +61,6 @@ cp_cco_bw_prio_heap_add_conn (cp_t *ctx, u16 cid, u8 prio)
conn = cp_cco_bw_prio_heap_init_prio_conn();
conn->cid = cid;
- conn->alloc_status = false;
/* add the new conn into the list */
list_push(&ctx->bw.prio_heap[prio].conns,&conn->node);
diff --git a/cesar/cp2/cco/bw/test/src/bw_test.c b/cesar/cp2/cco/bw/test/src/bw_test.c
index ed33e161c0..099dbdea22 100644
--- a/cesar/cp2/cco/bw/test/src/bw_test.c
+++ b/cesar/cp2/cco/bw/test/src/bw_test.c
@@ -269,6 +269,42 @@ u16 nb_ble;
cp_cco_bw_alloc_t alloc[10];
void
+test_case_bw_init(test_t test, cp_t *cp)
+{
+ test_case_begin(test, "\ninit BW");
+
+ cp_pwl_init(cp);
+ cp_conn_mgr_init(cp);
+ cp_sta_mgr_init(cp);
+ cp_cco_bw_init(cp);
+
+ test_begin(test,"init BW")
+ {
+ }
+ test_end;
+}
+void
+test_case_bw_uninit(test_t test,cp_t *cp)
+{
+ test_case_begin(test, "\nUninit BW");
+
+ cp_conn_mgr_uninit(cp);
+ cp_sta_mgr_uninit(cp);
+ cp_cco_bw_uninit(cp);
+
+ test_begin(test,"Uninit BW")
+ {
+ test_fail_if(!list_empty(&cp->bw.actual_schedule),
+ "actual schedule not empty");
+ test_fail_if(!list_empty(&cp->bw.finalised_schedule),
+ "actual schedule not empty");
+ test_fail_if(!blk_check_memory(),
+ "Memroy allocation pb");
+ }
+ test_end;
+}
+
+void
test_case_bw_init_new_sched (test_t test)
{
cp_t cp;
@@ -290,9 +326,8 @@ test_case_bw_init_new_sched (test_t test)
u16 end_tdma_st;
u16 end_tdma_et;
- cp_pwl_init(&cp);
- cp_sta_mgr_init(&cp);
- cp_cco_bw_init(&cp);
+ test_case_bw_init(test, &cp);
+
test_case_begin(test, "\nInit new schedule");
cp_cco_bw_new_sched(&cp);
@@ -345,6 +380,7 @@ test_case_bw_init_new_sched (test_t test)
"wrong end TDMA protection end time");
}
test_end;
+ test_case_bw_uninit(test, &cp);
}
void
@@ -359,9 +395,8 @@ test_case_get_alloc_ble(test_t test, u8 test_id)
cp_cco_bw_alloc_t last_alloc[3];
bool result[3];
- cp_pwl_init(&cp);
- cp_sta_mgr_init(&cp);
- cp_cco_bw_init(&cp);
+ test_case_bw_init(test, &cp);
+
cp_cco_bw_new_sched(&cp);
/*Fill BLE*/
@@ -410,6 +445,8 @@ test_case_get_alloc_ble(test_t test, u8 test_id)
test_fail_if(result[2],"there should be enough free time 3");
}
test_end;
+ cp_link_uninit(link);
+ test_case_bw_uninit(test, &cp);
}
void
@@ -417,14 +454,14 @@ test_case_complete_allocation (test_t test, u8 test_id)
{
u16 i,j;
cp_t cp;
+ u16 nb_alloc;
cp_conn_t *conn[3];
+ cp_cco_bw_alloc_t *alloc_tmp;
cp_cco_bw_alloc_t *alloc_test[3];
/*Initiate the bw context and conn context*/
- cp_pwl_init(&cp);
- cp_conn_mgr_init(&cp);
- cp_cco_bw_init(&cp);
+ test_case_bw_init(test, &cp);
cp_cco_bw_new_sched(&cp);
@@ -433,8 +470,12 @@ test_case_complete_allocation (test_t test, u8 test_id)
{
conn[i] = cp_conn_init_conn(&cp);
conn[i]->conn_info.cid = (i+1)*100;
+ conn[i]->flink->cinfo->valid_cinfo = 0x01;
conn[i]->flink->qmp->av_nb_pb = nb_pb;
conn[i]->flink->qmp->nb_txop = 1;
+ conn[i]->rlink->cinfo->valid_cinfo = 0x00;
+ conn[i]->flink->cinfo->user_priority = 0;
+ conn[i]->rlink->cinfo->user_priority = 0;
cp_conn_add_conn(&cp, conn[i]);
/*Init the BLEs*/
@@ -443,12 +484,19 @@ test_case_complete_allocation (test_t test, u8 test_id)
}
/*Add the fake allocation to test the allocation fonction*/
if(test_id == 0)
- for(i=0;i<10;i++)
- cp_cco_bw_alloc_add(&cp, &alloc[i]);
+ nb_alloc = 10;
else if(test_id == 1)
- for(i=0;i<6;i++)
- cp_cco_bw_alloc_add(&cp, &alloc[i]);
+ nb_alloc = 6;
+
+ for(i=0;i<nb_alloc;i++)
+ {
+ alloc_tmp = blk_alloc();
+ alloc_tmp->st_atu = alloc[i].st_atu;
+ alloc_tmp->et_atu = alloc[i].et_atu;
+ alloc_tmp->cid = alloc[i].cid;
+ cp_cco_bw_alloc_add(&cp, alloc_tmp);
+ }
test_case_begin(test, "Try to allocate into the Beacon Period");
@@ -492,7 +540,7 @@ test_case_complete_allocation (test_t test, u8 test_id)
}
}
test_end;
- cp_conn_mgr_uninit(&cp);
+ test_case_bw_uninit(test, &cp);
}
void
@@ -506,21 +554,20 @@ test_case_complete_schedule (test_t test)
cp_cco_bw_alloc_t *alloc_test[13];
cp_conn_t *conn[10];
- cp_pwl_init(&cp);
- cp_sta_mgr_init(&cp);
+ test_case_bw_init(test, &cp);
avln = cp_sta_mgr_get_our_avln (&cp);
- sta =cp_net_sta_add (&cp, avln, 1, 1);
- cp_cco_bw_init(&cp);
- cp_conn_mgr_init(&cp);
+ sta = cp_net_sta_add (&cp, avln, 1, 1);
/*Init the connections*/
for(i = 0 ; i < 10 ; i++)
{
conn[i] = cp_conn_init_conn(&cp);
conn[i]->conn_info.cid = (i+1)*10;
+ conn[i]->flink->cinfo->valid_cinfo = 0x01;
conn[i]->conn_info.cspec.f_cinfo->user_priority = conn_prio[i];
conn[i]->conn_info.cspec.f_qmp->nb_txop = 1;
conn[i]->conn_info.cspec.f_qmp->av_nb_pb = conn_nb_pb[i];
+ conn[i]->rlink->cinfo->valid_cinfo = 0x00;
cp_conn_add_conn(&cp, conn[i]);
/*Init the BLEs*/
@@ -601,8 +648,8 @@ test_case_complete_schedule (test_t test)
"wrong allocation cid");
}
test_end;
- blk_release(sta);
- cp_conn_mgr_uninit(&cp);
+ slab_release(sta);
+ test_case_bw_uninit(test, &cp);
}
void
@@ -612,9 +659,7 @@ test_case_add_get_alloc(test_t test)
cp_cco_bw_alloc_t *alloc;
cp_cco_bw_alloc_t *test_alloc;
- cp_pwl_init(&cp);
- cp_sta_mgr_init(&cp);
- cp_cco_bw_init(&cp);
+ test_case_bw_init(test, &cp);
alloc = blk_alloc();
alloc->st_atu = 1500;
@@ -637,6 +682,7 @@ test_case_add_get_alloc(test_t test)
}
test_end;
+ test_case_bw_uninit(test, &cp);
}
void
@@ -644,22 +690,20 @@ test_case_allocate_proxy(test_t test)
{
cp_t cp;
cp_net_t *avln;
- cp_sta_t *sta;
+ cp_sta_t *sta[3];
cp_cco_bw_alloc_t *pco_alloc[3];
- cp_pwl_init(&cp);
- cp_sta_mgr_init(&cp);
- cp_cco_bw_init(&cp);
+ test_case_bw_init(test, &cp);
avln = cp_sta_mgr_get_our_avln (&cp);
- sta = cp_net_sta_add (&cp, avln, 1, 1);
- cp_sta_set_pco_status (sta, true);
- sta = cp_net_sta_add (&cp, avln, 2, 2);
- cp_sta_set_pco_status (sta, true);
- sta = cp_net_sta_add (&cp, avln, 3, 3);
- cp_sta_set_pco_status (sta, true);
+ sta[0] = cp_net_sta_add (&cp, avln, 1, 1);
+ cp_sta_set_pco_status (sta[0], true);
+ sta[1] = cp_net_sta_add (&cp, avln, 2, 2);
+ cp_sta_set_pco_status (sta[1], true);
+ sta[2] = cp_net_sta_add (&cp, avln, 3, 3);
+ cp_sta_set_pco_status (sta[2], true);
test_case_begin(test, "Proxy allocation");
@@ -684,7 +728,13 @@ test_case_allocate_proxy(test_t test)
test_fail_if(pco_alloc[2]->et_atu != 423,
"PCo 2 wrong et");
}
+
+ blk_release(sta[0]);
+ blk_release(sta[1]);
+ blk_release(sta[2]);
+
test_end;
+ test_case_bw_uninit(test, &cp);
}
void
@@ -693,9 +743,7 @@ test_case_alloc_discover(test_t test)
cp_t cp;
cp_cco_bw_alloc_t *discover_alloc;
- cp_pwl_init(&cp);
- cp_sta_mgr_init(&cp);
- cp_cco_bw_init(&cp);
+ test_case_bw_init(test, &cp);
test_case_begin(test, "Proxy allocation");
@@ -711,6 +759,7 @@ test_case_alloc_discover(test_t test)
"Discover wrong et");
}
test_end;
+ test_case_bw_uninit(test, &cp);
}
void
@@ -721,14 +770,16 @@ test_case_allocate_multiple_txop (test_t test)
cp_cco_bw_alloc_t *alloc_test[7];
u16 j;
- cp_pwl_init(&cp);
- cp_conn_mgr_init(&cp);
- cp_cco_bw_init(&cp);
+ test_case_bw_init(test, &cp);
cp_cco_bw_new_sched(&cp);
conn[1]= cp_conn_init_conn(&cp);
+ conn[1]->flink->cinfo->valid_cinfo = 0x01;
+ conn[1]->rlink->cinfo->valid_cinfo = 0x00;
conn[1]->conn_info.cid = 200;
+ conn[1]->flink->cinfo->user_priority = 0;
+ conn[1]->rlink->cinfo->user_priority = 0;
conn[1]->conn_info.cspec.f_qmp->av_nb_pb = 50;
conn[1]->conn_info.cspec.f_qmp->nb_txop = 2;
cp_conn_add_conn(&cp, conn[1]);
@@ -738,6 +789,10 @@ test_case_allocate_multiple_txop (test_t test)
cp_link_push_ble(conn[1]->flink, ble_value[j], ble_end_time[j]);
conn[0]= cp_conn_init_conn(&cp);
+ conn[0]->flink->cinfo->valid_cinfo = 0x01;
+ conn[0]->rlink->cinfo->valid_cinfo = 0x00;
+ conn[0]->flink->cinfo->user_priority = 0;
+ conn[0]->rlink->cinfo->user_priority = 0;
conn[0]->conn_info.cid = 100;
conn[0]->conn_info.cspec.f_qmp->av_nb_pb = 100;
conn[0]->conn_info.cspec.f_qmp->nb_txop = 3;
@@ -755,15 +810,15 @@ test_case_allocate_multiple_txop (test_t test)
alloc_test[j] = cp_cco_bw_get_next_alloc_actual(alloc_test[j-1]);
test_case_begin(test, "Allocation with multiple TXOPs");
-
test_begin(test, "multiple TXOPs")
{
test_fail_if(alloc_test[4]->cid != 200,"wrong allocation");
test_fail_if(alloc_test[5]->cid != 200,"wrong allocation");
- test_fail_if(alloc_test[6]->cid != 0,"wrong allocation");
+ test_fail_if(alloc_test[6]->glid != MAC_LID_LOCAL_CSMA,"wrong allocation");
}
test_end;
+ test_case_bw_uninit(test, &cp);
}
void
test_case_f_and_r_alloc (test_t test)
@@ -777,12 +832,10 @@ test_case_f_and_r_alloc (test_t test)
cp_cco_bw_alloc_t *alloc_test[13];
cp_conn_t *conn[10];
- cp_pwl_init(&cp);
- cp_sta_mgr_init(&cp);
+ test_case_bw_init(test, &cp);
+
avln = cp_sta_mgr_get_our_avln (&cp);
- sta =cp_net_sta_add (&cp, avln, 1, 1);
- cp_cco_bw_init(&cp);
- cp_conn_mgr_init(&cp);
+ sta = cp_net_sta_add (&cp, avln, 1, 1);
/*Init the connections*/
for(nb_conn = 0 ; nb_conn < 5 ; nb_conn++)
@@ -793,10 +846,12 @@ test_case_f_and_r_alloc (test_t test)
conn[nb_conn]->flink->cinfo->user_priority = link_prio[nb_conn][0];
conn[nb_conn]->flink->qmp->nb_txop = 1;
conn[nb_conn]->flink->qmp->av_nb_pb = link_nb_pb[nb_conn][0];
+ conn[nb_conn]->flink->cinfo->valid_cinfo = 0x01;
conn[nb_conn]->rlink->cinfo->user_priority = link_prio[nb_conn][1];
conn[nb_conn]->rlink->qmp->nb_txop = 1;
conn[nb_conn]->rlink->qmp->av_nb_pb = link_nb_pb[nb_conn][1];
+ conn[nb_conn]->rlink->cinfo->valid_cinfo = 0x01;
cp_conn_add_conn(&cp, conn[nb_conn]);
@@ -881,8 +936,8 @@ test_case_f_and_r_alloc (test_t test)
"wrong allocation cid");
}
test_end;
- blk_release(sta);
- cp_conn_mgr_uninit(&cp);
+ slab_release(sta);
+ test_case_bw_uninit(test, &cp);
}
void
@@ -891,12 +946,11 @@ test_case_finalise_sched (test_t test, int test_id)
u16 i;
cp_t cp;
+ cp_cco_bw_alloc_t *alloc_tmp;
cp_cco_bw_alloc_t *alloc_test[23];
/*Initiate the bw context and conn context*/
- cp_pwl_init(&cp);
- cp_conn_mgr_init(&cp);
- cp_cco_bw_init(&cp);
+ test_case_bw_init(test, &cp);
cp_cco_bw_new_sched(&cp);
@@ -904,16 +958,22 @@ test_case_finalise_sched (test_t test, int test_id)
if(!test_id)
{
for(i=0;i<10;i++)
- cp_cco_bw_alloc_add(&cp, &alloc[i]);
+ {
+ alloc_tmp = blk_alloc();
+ alloc_tmp->st_atu = alloc[i].st_atu;
+ alloc_tmp->et_atu = alloc[i].et_atu;
+ alloc_tmp->cid = alloc[i].cid;
+ cp_cco_bw_alloc_add(&cp, alloc_tmp);
+ }
test_case_begin(test, "Finalise Schedule");
cp_cco_bw_finalise_sched(&cp);
- alloc_test[0] = cp_cco_bw_get_first_alloc(&cp,CP_CCO_BW_PERSISTENCE_NOT_PERSISTENT);
+ alloc_test[0] = cp_cco_bw_get_first_alloc_finalised(&cp);
for(i=1;i<23;i++)
- alloc_test[i] = cp_cco_bw_get_next_alloc(&cp, alloc_test[i-1]);
+ alloc_test[i] = cp_cco_bw_get_next_alloc_finalised(alloc_test[i-1]);
test_begin(test, "Finalise Schedule")
{
@@ -937,8 +997,8 @@ test_case_finalise_sched (test_t test, int test_id)
test_fail_if(alloc_test[22]->et_atu != 3906,"wrong end time");
}
test_end;
- cp_conn_mgr_uninit(&cp);
}
+ test_case_bw_uninit(test, &cp);
}
int
@@ -950,9 +1010,8 @@ main (void){
test_init(test, 0, NULL);
- test_case_bw_init_new_sched (test);
-
test_case_allocate_proxy(test);
+
test_case_alloc_discover(test);
test_case_add_get_alloc(test);