commit b78fa5611f0ac12be18b016b084f8da0a85ce56b
parent 910365e0b8a4c16b5a21aad3fce9f027f81ee104
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Tue, 2 Sep 2025 11:10:25 +0200
Fix scene clear
Was only releasing 1 ref: geometries with more than 1 ref where not
released.
Diffstat:
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/src/scad_geometry.c b/src/scad_geometry.c
@@ -653,7 +653,9 @@ scad_scene_clear
}
while(!htable_geometries_iterator_eq(&it, &end)) {
struct scad_geometry* geom = *htable_geometries_iterator_key_get(&it);
- ERR(scad_geometry_ref_put(geom));
+ while(geom->ref > 0) {
+ ERR(scad_geometry_ref_put(geom));
+ }
htable_geometries_iterator_next(&it);
}
if(dev->log) {
diff --git a/src/test_api.c b/src/test_api.c
@@ -247,6 +247,22 @@ main(int argc, char* argv[])
OK(scad_scene_count(&c));
CHK(c == 0);
+ OK(scad_scene_clear());
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+ OK(scad_add_rectangle(p1, d2, &geom));
+ OK(scad_scene_clear());
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+ OK(scad_add_rectangle(p1, d2, &geom));
+ OK(scad_geometry_ref_get(geom));
+ OK(scad_scene_clear());
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
+ OK(scad_scene_count(&c));
+ CHK(c == 0);
+
BAD(scad_scene_write(NULL));
ERR(scad_scene_write(""));
ERR(scad_scene_write("/tmp/test.bad"));