From 3a068df322cc97a0c4e6aa93b3eaa25a8fdfa18a Mon Sep 17 00:00:00 2001 From: Marion Guthmuller Date: Tue, 24 Sep 2013 18:41:31 +0200 Subject: [PATCH] model-checker : fix system state comparison (I hate dangling pointers ...) --- examples/msg/mc/bugged1_liveness.c | 5 +- examples/msg/mc/bugged1_liveness_visited.tesh | 49 ++++++------------- src/mc/mc_compare.c | 11 ++--- src/mc/mc_global.c | 17 +++++++ src/xbt/mmalloc/mm_diff.c | 13 +++-- 5 files changed, 44 insertions(+), 51 deletions(-) diff --git a/examples/msg/mc/bugged1_liveness.c b/examples/msg/mc/bugged1_liveness.c index b020037ea5..bd59651aaa 100644 --- a/examples/msg/mc/bugged1_liveness.c +++ b/examples/msg/mc/bugged1_liveness.c @@ -29,12 +29,13 @@ int coordinator(int argc, char *argv[]) int CS_used = 0; msg_task_t task = NULL, answer = NULL; xbt_dynar_t requests = xbt_dynar_new(sizeof(char *), NULL); + char *req; while(1){ MSG_task_receive(&task, "coordinator"); const char *kind = MSG_task_get_name(task); if (!strcmp(kind, "request")) { - char *req = MSG_task_get_data(task); + req = MSG_task_get_data(task); if (CS_used) { XBT_INFO("CS already used. Queue the request."); xbt_dynar_push(requests, &req); @@ -50,7 +51,6 @@ int coordinator(int argc, char *argv[]) } else { if (!xbt_dynar_is_empty(requests)) { XBT_INFO("CS release. Grant to queued requests (queue size: %lu)", xbt_dynar_length(requests)); - char *req; xbt_dynar_pop(requests, &req); if(strcmp(req, "1") != 0){ MSG_task_send(MSG_task_create("grant", 0, 1000, NULL), req); @@ -66,6 +66,7 @@ int coordinator(int argc, char *argv[]) MSG_task_destroy(task); task = NULL; kind = NULL; + req = NULL; } return 0; diff --git a/examples/msg/mc/bugged1_liveness_visited.tesh b/examples/msg/mc/bugged1_liveness_visited.tesh index 0e115e71a6..2e5bd61d03 100644 --- a/examples/msg/mc/bugged1_liveness_visited.tesh +++ b/examples/msg/mc/bugged1_liveness_visited.tesh @@ -1,7 +1,7 @@ #! ./tesh ! expect signal SIGABRT -! timeout 20 +! timeout 60 $ ${bindir:=.}/bugged1_liveness ${bindir:=.}/../msg_platform.xml ${bindir:=.}/deploy_bugged1_liveness_visited.xml --cfg=model-check:1 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" --cfg=contexts/factory:ucontext --cfg=model-check/visited:100 > [ 0.000000] (0:@) Configuration change: Set 'model-check' to '1' > [ 0.000000] (0:@) Configuration change: Set 'model-check/visited' to '100' @@ -59,10 +59,6 @@ $ ${bindir:=.}/bugged1_liveness ${bindir:=.}/../msg_platform.xml ${bindir:=.}/de > [ 0.000000] (1:coordinator@Tremblay) CS release. Grant to queued requests (queue size: 1) > [ 0.000000] (2:client@Boivin) Ask the request > [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly -> [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it -> [ 0.000000] (1:coordinator@Tremblay) CS release. Grant to queued requests (queue size: 1) -> [ 0.000000] (2:client@Boivin) Ask the request -> [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly > [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly > [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it > [ 0.000000] (1:coordinator@Tremblay) CS release. resource now idle @@ -79,8 +75,6 @@ $ ${bindir:=.}/bugged1_liveness ${bindir:=.}/../msg_platform.xml ${bindir:=.}/de > [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly > [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it > [ 0.000000] (1:coordinator@Tremblay) CS release. Grant to queued requests (queue size: 1) -> [ 0.000000] (2:client@Boivin) Ask the request -> [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly > [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly > [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it > [ 0.000000] (1:coordinator@Tremblay) CS release. resource now idle @@ -96,12 +90,10 @@ $ ${bindir:=.}/bugged1_liveness ${bindir:=.}/../msg_platform.xml ${bindir:=.}/de > [ 0.000000] (2:client@Boivin) Ask the request > [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly > [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it -> [ 0.000000] (1:coordinator@Tremblay) CS release. Grant to queued requests (queue size: 1) > [ 0.000000] (2:client@Boivin) Ask the request -> [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly -> [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it > [ 0.000000] (1:coordinator@Tremblay) CS release. Grant to queued requests (queue size: 1) > [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly +> [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly > [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it > [ 0.000000] (1:coordinator@Tremblay) CS release. resource now idle > [ 0.000000] (2:client@Boivin) Ask the request @@ -116,10 +108,6 @@ $ ${bindir:=.}/bugged1_liveness ${bindir:=.}/../msg_platform.xml ${bindir:=.}/de > [ 0.000000] (2:client@Boivin) Ask the request > [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly > [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it -> [ 0.000000] (1:coordinator@Tremblay) CS release. Grant to queued requests (queue size: 1) -> [ 0.000000] (2:client@Boivin) Ask the request -> [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly -> [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it > [ 0.000000] (2:client@Boivin) Ask the request > [ 0.000000] (1:coordinator@Tremblay) CS release. Grant to queued requests (queue size: 1) > [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly @@ -138,12 +126,10 @@ $ ${bindir:=.}/bugged1_liveness ${bindir:=.}/../msg_platform.xml ${bindir:=.}/de > [ 0.000000] (2:client@Boivin) Ask the request > [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly > [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it -> [ 0.000000] (1:coordinator@Tremblay) CS release. Grant to queued requests (queue size: 1) > [ 0.000000] (2:client@Boivin) Ask the request +> [ 0.000000] (1:coordinator@Tremblay) CS release. Grant to queued requests (queue size: 1) > [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly > [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it -> [ 0.000000] (2:client@Boivin) Ask the request -> [ 0.000000] (1:coordinator@Tremblay) CS release. Grant to queued requests (queue size: 1) > [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly > [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it > [ 0.000000] (1:coordinator@Tremblay) CS release. resource now idle @@ -159,19 +145,17 @@ $ ${bindir:=.}/bugged1_liveness ${bindir:=.}/../msg_platform.xml ${bindir:=.}/de > [ 0.000000] (2:client@Boivin) Ask the request > [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly > [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it -> [ 0.000000] (1:coordinator@Tremblay) CS release. Grant to queued requests (queue size: 1) -> [ 0.000000] (2:client@Boivin) Ask the request -> [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly -> [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it > [ 0.000000] (2:client@Boivin) Ask the request > [ 0.000000] (1:coordinator@Tremblay) CS release. Grant to queued requests (queue size: 1) -> [ 0.000000] (3:client@Fafard) Propositions changed : r=1, cs=0 > [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly > [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it +> [ 0.000000] (3:client@Fafard) Propositions changed : r=1, cs=0 > [ 0.000000] (1:coordinator@Tremblay) CS release. Grant to queued requests (queue size: 1) > [ 0.000000] (2:client@Boivin) Ask the request > [ 0.000000] (1:coordinator@Tremblay) CS idle. Grant immediatly -> [ 0.000000] (0:@) Pair 91 already reached (equal to pair 79) ! +> [ 0.000000] (2:client@Boivin) 2 got the answer. Sleep a bit and release it +> [ 0.000000] (1:coordinator@Tremblay) CS release. Grant to queued requests (queue size: 1) +> [ 0.000000] (0:@) Pair 86 already reached (equal to pair 74) ! > [ 0.000000] (0:@) *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* > [ 0.000000] (0:@) | ACCEPTANCE CYCLE | > [ 0.000000] (0:@) *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* @@ -222,12 +206,12 @@ $ ${bindir:=.}/bugged1_liveness ${bindir:=.}/../msg_platform.xml ${bindir:=.}/de > [ 0.000000] (0:@) [(2)Boivin (client)] Wait(comm=(verbose only) [(2)Boivin (client)-> (1)Tremblay (coordinator)]) (62) > [ 0.000000] (0:@) [(2)Boivin (client)] iRecv(dst=(2)Boivin (client), buff=(verbose only), size=(verbose only)) (56) > [ 0.000000] (0:@) [(1)Tremblay (coordinator)] Wait(comm=(verbose only) [(1)Tremblay (coordinator)-> (2)Boivin (client)]) (62) -> [ 0.000000] (0:@) [(1)Tremblay (coordinator)] iRecv(dst=(1)Tremblay (coordinator), buff=(verbose only), size=(verbose only)) (56) > [ 0.000000] (0:@) [(2)Boivin (client)] Wait(comm=(verbose only) [(1)Tremblay (coordinator)-> (2)Boivin (client)]) (62) +> [ 0.000000] (0:@) [(1)Tremblay (coordinator)] iRecv(dst=(1)Tremblay (coordinator), buff=(verbose only), size=(verbose only)) (56) > [ 0.000000] (0:@) [(2)Boivin (client)] iSend(src=(2)Boivin (client), buff=(verbose only), size=(verbose only)) (54) +> [ 0.000000] (0:@) [(2)Boivin (client)] Wait(comm=(verbose only) [(2)Boivin (client)-> (1)Tremblay (coordinator)]) (62) > [ 0.000000] (0:@) [(1)Tremblay (coordinator)] Wait(comm=(verbose only) [(2)Boivin (client)-> (1)Tremblay (coordinator)]) (62) > [ 0.000000] (0:@) [(1)Tremblay (coordinator)] iRecv(dst=(1)Tremblay (coordinator), buff=(verbose only), size=(verbose only)) (56) -> [ 0.000000] (0:@) [(2)Boivin (client)] Wait(comm=(verbose only) [(2)Boivin (client)-> (1)Tremblay (coordinator)]) (62) > [ 0.000000] (0:@) [(2)Boivin (client)] iSend(src=(2)Boivin (client), buff=(verbose only), size=(verbose only)) (54) > [ 0.000000] (0:@) [(2)Boivin (client)] Wait(comm=(verbose only) [(2)Boivin (client)-> (1)Tremblay (coordinator)]) (62) > [ 0.000000] (0:@) [(1)Tremblay (coordinator)] Wait(comm=(verbose only) [(2)Boivin (client)-> (1)Tremblay (coordinator)]) (62) @@ -236,12 +220,12 @@ $ ${bindir:=.}/bugged1_liveness ${bindir:=.}/../msg_platform.xml ${bindir:=.}/de > [ 0.000000] (0:@) [(2)Boivin (client)] Wait(comm=(verbose only) [(1)Tremblay (coordinator)-> (2)Boivin (client)]) (62) > [ 0.000000] (0:@) [(1)Tremblay (coordinator)] Wait(comm=(verbose only) [(1)Tremblay (coordinator)-> (2)Boivin (client)]) (62) > [ 0.000000] (0:@) [(1)Tremblay (coordinator)] iRecv(dst=(1)Tremblay (coordinator), buff=(verbose only), size=(verbose only)) (56) +> [ 0.000000] (0:@) [(3)Fafard (client)] Wait(comm=(verbose only) [(3)Fafard (client)-> (1)Tremblay (coordinator)]) (62) > [ 0.000000] (0:@) [(2)Boivin (client)] iSend(src=(2)Boivin (client), buff=(verbose only), size=(verbose only)) (54) -> [ 0.000000] (0:@) [(2)Boivin (client)] Wait(comm=(verbose only) [(2)Boivin (client)-> (1)Tremblay (coordinator)]) (62) > [ 0.000000] (0:@) [(1)Tremblay (coordinator)] Wait(comm=(verbose only) [(2)Boivin (client)-> (1)Tremblay (coordinator)]) (62) > [ 0.000000] (0:@) [(1)Tremblay (coordinator)] iRecv(dst=(1)Tremblay (coordinator), buff=(verbose only), size=(verbose only)) (56) +> [ 0.000000] (0:@) [(2)Boivin (client)] Wait(comm=(verbose only) [(2)Boivin (client)-> (1)Tremblay (coordinator)]) (62) > [ 0.000000] (0:@) [(2)Boivin (client)] iSend(src=(2)Boivin (client), buff=(verbose only), size=(verbose only)) (54) -> [ 0.000000] (0:@) [(3)Fafard (client)] Wait(comm=(verbose only) [(3)Fafard (client)-> (1)Tremblay (coordinator)]) (62) > [ 0.000000] (0:@) [(1)Tremblay (coordinator)] Wait(comm=(verbose only) [(2)Boivin (client)-> (1)Tremblay (coordinator)]) (62) > [ 0.000000] (0:@) [(1)Tremblay (coordinator)] iSend(src=(1)Tremblay (coordinator), buff=(verbose only), size=(verbose only)) (54) > [ 0.000000] (0:@) [(2)Boivin (client)] Wait(comm=(verbose only) [(2)Boivin (client)-> (1)Tremblay (coordinator)]) (62) @@ -251,11 +235,6 @@ $ ${bindir:=.}/bugged1_liveness ${bindir:=.}/../msg_platform.xml ${bindir:=.}/de > [ 0.000000] (0:@) [(2)Boivin (client)] Wait(comm=(verbose only) [(1)Tremblay (coordinator)-> (2)Boivin (client)]) (62) > [ 0.000000] (0:@) [(2)Boivin (client)] iSend(src=(2)Boivin (client), buff=(verbose only), size=(verbose only)) (54) > [ 0.000000] (0:@) [(1)Tremblay (coordinator)] Wait(comm=(verbose only) [(2)Boivin (client)-> (1)Tremblay (coordinator)]) (62) -> [ 0.000000] (0:@) [(1)Tremblay (coordinator)] iRecv(dst=(1)Tremblay (coordinator), buff=(verbose only), size=(verbose only)) (56) -> [ 0.000000] (0:@) [(2)Boivin (client)] Wait(comm=(verbose only) [(2)Boivin (client)-> (1)Tremblay (coordinator)]) (62) -> [ 0.000000] (0:@) [(2)Boivin (client)] iSend(src=(2)Boivin (client), buff=(verbose only), size=(verbose only)) (54) -> [ 0.000000] (0:@) [(1)Tremblay (coordinator)] Wait(comm=(verbose only) [(2)Boivin (client)-> (1)Tremblay (coordinator)]) (62) -> [ 0.000000] (0:@) [(1)Tremblay (coordinator)] iSend(src=(1)Tremblay (coordinator), buff=(verbose only), size=(verbose only)) (54) -> [ 0.000000] (0:@) Expanded pairs = 91 -> [ 0.000000] (0:@) Visited pairs = 502 -> [ 0.000000] (0:@) Executed transitions = 501 \ No newline at end of file +> [ 0.000000] (0:@) Expanded pairs = 86 +> [ 0.000000] (0:@) Visited pairs = 461 +> [ 0.000000] (0:@) Executed transitions = 460 diff --git a/src/mc/mc_compare.c b/src/mc/mc_compare.c index 85c2901c94..1007083957 100644 --- a/src/mc/mc_compare.c +++ b/src/mc/mc_compare.c @@ -128,7 +128,6 @@ static int compare_areas_with_type(void *area1, void *area2, xbt_dict_t types, x dw_type_t member, subtype, subsubtype; int elm_size, i, res, switch_types = 0; void *addr_pointed1, *addr_pointed2; - int pointed_area_size1, pointed_area_size2; switch(type->type){ case e_dw_base_type: @@ -194,8 +193,6 @@ static int compare_areas_with_type(void *area1, void *area2, xbt_dict_t types, x addr_pointed1 = *((void **)(area1)); addr_pointed2 = *((void **)(area2)); - if((addr_pointed1 == addr_pointed2) && ((pointed_area_size1 = get_pointed_area_size(addr_pointed1, 1)) != (pointed_area_size2 = get_pointed_area_size(addr_pointed2, 2)))) - return -1; if(addr_pointed1 == NULL && addr_pointed2 == NULL) return 0; if(already_compared_pointers(addr_pointed1, addr_pointed2) != -1) @@ -272,7 +269,7 @@ static int compare_global_variables(int region_type, mc_mem_region_t r1, mc_mem_ res = compare_areas_with_type((char *)r1->data + offset, (char *)r2->data + offset, types, other_types, current_var->type_origin, r1->size, region_type, start_data, 0); if(res == 1){ - XBT_VERB("Global variable %s is different between snapshots", current_var->name); + XBT_VERB("Global variable %s (%p - %p) is different between snapshots", current_var->name, (char *)r1->data + offset, (char *)r2->data + offset); xbt_dynar_free(&compared_pointers); compared_pointers = NULL; return 1; @@ -315,11 +312,11 @@ static int compare_local_variables(mc_snapshot_stack_t stack1, mc_snapshot_stack offset1 = (char *)current_var1->address - (char *)std_heap; offset2 = (char *)current_var2->address - (char *)std_heap; if(current_var1->region == 1) - res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, mc_variables_type_libsimgrid, mc_variables_type_binary, current_var1->type, 0, 1, start_data_libsimgrid, 0l); + res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, mc_variables_type_libsimgrid, mc_variables_type_binary, current_var1->type, 0, 1, start_data_libsimgrid, 0); else - res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, mc_variables_type_binary, mc_variables_type_libsimgrid, current_var1->type, 0, 2, start_data_binary, 0l); + res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, mc_variables_type_binary, mc_variables_type_libsimgrid, current_var1->type, 0, 2, start_data_binary, 0); if(res == 1){ - XBT_VERB("Local variable %s in frame %s is different between snapshots", current_var1->name, current_var1->frame); + XBT_VERB("Local variable %s (%p - %p) in frame %s is different between snapshots", current_var1->name,(char *)heap1 + offset1, (char *)heap2 + offset2, current_var1->frame); xbt_dynar_free(&compared_pointers); compared_pointers = NULL; return res; diff --git a/src/mc/mc_global.c b/src/mc/mc_global.c index d137272a49..562e66b64e 100644 --- a/src/mc/mc_global.c +++ b/src/mc/mc_global.c @@ -1474,6 +1474,23 @@ void MC_ignore_local_variable(const char *var_name, const char *frame_name){ } } } + xbt_dict_foreach(mc_local_variables_binary, dict_cursor, current_frame_name, frame){ + start = 0; + end = xbt_dynar_length(frame->variables) - 1; + while(start <= end){ + cursor = (start + end) / 2; + current_var = (dw_variable_t)xbt_dynar_get_as(frame->variables, cursor, dw_variable_t); + if(strcmp(current_var->name, var_name) == 0){ + xbt_dynar_remove_at(frame->variables, cursor, NULL); + start = 0; + end = xbt_dynar_length(frame->variables) - 1; + }else if(strcmp(current_var->name, var_name) < 0){ + start = cursor + 1; + }else{ + end = cursor - 1; + } + } + } }else{ xbt_dynar_t variables_list = ((dw_frame_t)xbt_dict_get_or_null(mc_local_variables_libsimgrid, frame_name))->variables; start = 0; diff --git a/src/xbt/mmalloc/mm_diff.c b/src/xbt/mmalloc/mm_diff.c index 34f15e62da..14bf9ff9d3 100644 --- a/src/xbt/mmalloc/mm_diff.c +++ b/src/xbt/mmalloc/mm_diff.c @@ -706,9 +706,8 @@ static int compare_heap_area_without_type(void *real_area1, void *real_area2, vo }else if((addr_pointed1 > s_heap) && ((char *)addr_pointed1 < (char *)s_heap + STD_HEAP_SIZE) && (addr_pointed2 > s_heap) && ((char *)addr_pointed2 < (char *)s_heap + STD_HEAP_SIZE)){ res_compare = compare_heap_area(addr_pointed1, addr_pointed2, previous, all_types, other_types, NULL, 0); - if(res_compare != 0){ + if(res_compare == 1) return res_compare; - } i = pointer_align + sizeof(void *); continue; }else{ @@ -751,7 +750,7 @@ static int compare_heap_area_with_type(void *real_area1, void *real_area2, void if((check_ignore > 0) && ((ignore1 = heap_comparison_ignore_size(to_ignore1, real_area1)) > 0) && ((ignore2 = heap_comparison_ignore_size(to_ignore2, real_area2)) == ignore1)) return 0; if(strcmp(type->name, "char") == 0){ /* String, hence random (arbitrary ?) size */ - return (memcmp(area1, area2, area_size) != 0); + return (memcmp(area1, area2, area_size) != 0); }else{ if(area_size != -1 && type->size != area_size) return -1; @@ -878,7 +877,7 @@ static int compare_heap_area_with_type(void *real_area1, void *real_area2, void else res = compare_heap_area_with_type((char *)real_area1 + member->offset, (char *)real_area2 + member->offset, (char *)area1 + member->offset, (char *)area2 + member->offset, previous, all_types, other_types, member->dw_type_id, -1, check_ignore, 0); if(res == 1) - return res; + return res; } } break; @@ -973,7 +972,7 @@ int compare_heap_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dict_t type = xbt_dict_get_or_null(other_types, get_type_description(other_types, type->name)); } if(strcmp(type->name, "s_smx_context") != 0){ - if(type->size > 1){ + if(type->size > 0){ if(heapinfo1[block1].busy_block.busy_size != type->size && heapinfo2[block2].busy_block.busy_size != type->size) return -1; } @@ -1049,7 +1048,7 @@ int compare_heap_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dict_t type = xbt_dict_get_or_null(all_types, type->dw_type_id); } } - if(type->size > 1){ + if(type->size > 0){ if(heapinfo1[block1].busy_frag.frag_size[frag1] != type->size || heapinfo2[block2].busy_frag.frag_size[frag2] != type->size) return -1; } @@ -1069,7 +1068,7 @@ int compare_heap_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dict_t if(match_pairs){ xbt_dynar_free(&previous); } - return 1; + return 1; } if(!add_heap_area_pair(previous, block1, frag1, block2, frag2)){ -- 2.20.1