commit e946083eb5004db684d8baf38ca4a18b3da8dd31
parent d1e5fe1489fb341013b3a7a21157a3894c0cc2f3
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Thu, 9 Mar 2023 18:22:25 +0100
Fix some star-cad geometry not released
Diffstat:
2 files changed, 34 insertions(+), 22 deletions(-)
diff --git a/src/cg_construction_mode_0.c b/src/cg_construction_mode_0.c
@@ -762,18 +762,25 @@ release_cad_cmode_0
goto error;
}
- if(data_cad->cavity) SCAD(geometry_delete(data_cad->cavity));
- if(data_cad->floor) SCAD(geometry_delete(data_cad->floor));
- if(data_cad->ground_connection) SCAD(geometry_delete(data_cad->ground_connection));
- if(data_cad->roof) SCAD(geometry_delete(data_cad->roof));
- if(data_cad->wall) SCAD(geometry_delete(data_cad->wall));
- if(data_cad->fake_ground) SCAD(geometry_delete(data_cad->fake_ground));
+#define GDEL(Field) \
+ if(data_cad->Field) SCAD(geometry_delete(data_cad->Field)); \
+ /* To ease debugging, write NULL after deletion */ \
+ data_cad->Field = NULL
+ GDEL(cavity);
+ GDEL(floor);
+ GDEL(ground_connection);
+ GDEL(roof);
+ GDEL(wall);
+ GDEL(fake_ground);
+ GDEL(boundary[0]);
+ GDEL(boundary[1]);
for(i = 0; i < data_cad->n_connection; i++) {
- SCAD(geometry_delete(data_cad->connection[i]));
+ GDEL(connection[i]);
}
MEM_RM(allocator, data_cad->boundary);
MEM_RM(allocator, data_cad->connection);
MEM_RM(allocator, data_cad);
+#undef GDEL
exit:
return res;
diff --git a/src/cg_construction_mode_1.c b/src/cg_construction_mode_1.c
@@ -1881,21 +1881,25 @@ release_cad_cmode_1
goto error;
}
- if(data_cad->attic_cavity) SCAD(geometry_delete(data_cad->attic_cavity));
- if(data_cad->crawlspace_cavity) SCAD(geometry_delete(data_cad->crawlspace_cavity));
- if(data_cad->external_insulation) SCAD(geometry_delete(data_cad->external_insulation));
- if(data_cad->fake_ground) SCAD(geometry_delete(data_cad->fake_ground));
- if(data_cad->floor) SCAD(geometry_delete(data_cad->floor));
- if(data_cad->floor_insulation) SCAD(geometry_delete(data_cad->floor_insulation));
- if(data_cad->foundation) SCAD(geometry_delete(data_cad->foundation));
- if(data_cad->glass) SCAD(geometry_delete(data_cad->glass));
- if(data_cad->ground_connection) SCAD(geometry_delete(data_cad->ground_connection));
- if(data_cad->habitable_cavity) SCAD(geometry_delete(data_cad->habitable_cavity));
- if(data_cad->intermediate_floor) SCAD(geometry_delete(data_cad->intermediate_floor));
- if(data_cad->internal_insulation) SCAD(geometry_delete(data_cad->internal_insulation));
- if(data_cad->roof) SCAD(geometry_delete(data_cad->roof));
- if(data_cad->roof_insulation) SCAD(geometry_delete(data_cad->roof_insulation));
- if(data_cad->wall) SCAD(geometry_delete(data_cad->wall));
+#define GDEL(Field) \
+ if(data_cad->Field) SCAD(geometry_delete(data_cad->Field)); \
+ /* To ease debugging, write NULL after deletion */ \
+ data_cad->Field = NULL
+ GDEL(attic_cavity);
+ GDEL(crawlspace_cavity);
+ GDEL(external_insulation);
+ GDEL(fake_ground);
+ GDEL(floor);
+ GDEL(floor_insulation);
+ GDEL(foundation);
+ GDEL(glass);
+ GDEL(ground_connection);
+ GDEL(habitable_cavity);
+ GDEL(intermediate_floor);
+ GDEL(internal_insulation);
+ GDEL(roof);
+ GDEL(roof_insulation);
+ GDEL(wall);
for(i = 0; i < darray_geometries_size_get(&data_cad->boundary); i++) {
struct scad_geometry* b = darray_geometries_data_get(&data_cad->boundary)[i];
ERR(scad_geometry_delete(b));
@@ -1907,6 +1911,7 @@ release_cad_cmode_1
darray_geometries_release(&data_cad->boundary);
darray_geometries_release(&data_cad->connection);
MEM_RM(allocator, data_cad);
+#undef GDEL
exit:
return res;