star-cad

Geometric operators for computer-aided design
git clone git://git.meso-star.fr/star-cad.git
Log | Files | Refs | README | LICENSE

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:
Msrc/scad_geometry.c | 4+++-
Msrc/test_api.c | 16++++++++++++++++
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"));