Changeset: 05bc5907e01b for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=05bc5907e01b Modified Files: geom/monetdb5/sfcgal.c Branch: sfcgal Log Message:
A bunch of leaks related with sfcgal structures, that's why today was raining. diffs (159 lines): diff --git a/geom/monetdb5/sfcgal.c b/geom/monetdb5/sfcgal.c --- a/geom/monetdb5/sfcgal.c +++ b/geom/monetdb5/sfcgal.c @@ -324,6 +324,8 @@ sfcgal_to_geom(GEOSGeom *res, const sfcg return ret; } *res = GEOSGeom_createCollection(type-1, geoms, ngeoms); + if (geoms) + GDKfree(geoms); break; case SFCGAL_TYPE_POLYHEDRALSURFACE: ngeoms = sfcgal_polyhedral_surface_num_polygons(geom); @@ -346,6 +348,8 @@ sfcgal_to_geom(GEOSGeom *res, const sfcg return ret; } *res = GEOSGeom_createCollection(type-1, geoms, ngeoms); + if (geoms) + GDKfree(geoms); break; /* Solid is map as a closed PolyhedralSurface (for now) */ case SFCGAL_TYPE_SOLID: @@ -378,6 +382,8 @@ sfcgal_to_geom(GEOSGeom *res, const sfcg return ret; } *res = GEOSGeom_createCollection(type-1, geoms, ngeoms); + if (geoms) + GDKfree(geoms); //TODO: if (ngeoms) FLAGS_SET_SOLID( rgeom->flags, 1); break; case SFCGAL_TYPE_TRIANGULATEDSURFACE: @@ -401,6 +407,8 @@ sfcgal_to_geom(GEOSGeom *res, const sfcg return ret; } *res = GEOSGeom_createCollection(type-1, geoms, ngeoms); + if (geoms) + GDKfree(geoms); break; //Unsupported types. case SFCGAL_TYPE_MULTISOLID: @@ -460,6 +468,7 @@ sfcgal_from_geom(str *ret, const GEOSGeo sfcgal_linestring_add_point(line, sfcgal_point_create_from_xy(point_x, point_y)); } + GEOSGeom_destroy(pointG); } return line; @@ -720,17 +729,23 @@ geom_sfcgal_extrude(wkb **res, wkb **geo msg = createException(MAL, "geom_sfcgal_extrude", "geom_to_sfcgal failed:%s", ret); GDKfree(ret); return msg; - } + } else { + GEOSGeom_destroy(inGeos); + } if (!(outGeom = sfcgal_geometry_extrude (inGeom, *ex, *ey, *ez))) { *res = NULL; return createException(MAL, "geom_sfcgal_extrude", "sfcgal_geometry_extrude failed"); - } + } else { + sfcgal_geometry_delete(inGeom); + } if ( ( ret = sfcgal_to_geom(&outGeos, outGeom, 0, srid, 0)) != MAL_SUCCEED) { *res = NULL; msg = createException(MAL, "geom_sfcgal_extrude", "sfcgal_to_geom failed:%s", ret); GDKfree(ret); return msg; + } else { + sfcgal_geometry_delete(outGeom); } *res = geos2wkb(outGeos); @@ -766,17 +781,23 @@ geom_sfcgal_straightSkeleton(wkb **res, msg = createException(MAL, "geom_sfcgal_straightSkeleton", "geom_to_sfcgal failed:%s", ret); GDKfree(ret); return msg; - } + } else { + GEOSGeom_destroy(inGeos); + } if (!(outGeom = sfcgal_geometry_straight_skeleton(inGeom))) { *res = NULL; return createException(MAL, "geom_sfcgal_straightSkeleton", "sfcgal_geometry_straight_skeleton failed"); - } + } else { + sfcgal_geometry_delete(inGeom); + } if ( (ret = sfcgal_to_geom(&outGeos, outGeom, 0, srid, 0)) != MAL_SUCCEED) { *res = NULL; msg = createException(MAL, "geom_sfcgal_straightSkeleton", "sfcgal_to_geom failed:%s", ret); GDKfree(ret); return msg; + } else { + sfcgal_geometry_delete(outGeom); } *res = geos2wkb(outGeos); @@ -812,17 +833,23 @@ geom_sfcgal_tesselate(wkb **res, wkb **g msg = createException(MAL, "geom_sfcgal_tesselate", "geom_to_sfcgal failed:%s", ret); GDKfree(ret); return msg; - } + } else { + GEOSGeom_destroy(inGeos); + } if (!(outGeom = sfcgal_geometry_tesselate(inGeom))) { *res = NULL; return createException(MAL, "geom_sfcgal_tesselate", "sfcgal_geometry_tesselate failed"); - } + } else { + sfcgal_geometry_delete(inGeom); + } if ( (ret = sfcgal_to_geom(&outGeos, outGeom, 0, srid, 0)) != MAL_SUCCEED) { *res = NULL; msg = createException(MAL, "geom_sfcgal_tesselate", "sfcgal_to_geom failed:%s", ret); GDKfree(ret); return msg; + } else { + sfcgal_geometry_delete(outGeom); } *res = geos2wkb(outGeos); @@ -858,7 +885,9 @@ geom_sfcgal_triangulate2DZ(wkb **res, wk msg = createException(MAL, "geom_sfcgal_triangulate2DZ", "geom_to_sfcgal failed:%s", ret); GDKfree(ret); return msg; - } + } else { + GEOSGeom_destroy(inGeos); + } if (!(outGeom = sfcgal_geometry_triangulate_2dz(inGeom))) { /*TODO:Make sure you can jump over it*/ @@ -867,7 +896,9 @@ geom_sfcgal_triangulate2DZ(wkb **res, wk if ((*res = wkbNULLcopy()) == NULL) throw(MAL, "geom_sfcgal_triangulate2DZ", MAL_MALLOC_FAIL); return MAL_SUCCEED; - } + } else { + sfcgal_geometry_delete(inGeom); + } if ( (ret = sfcgal_to_geom(&outGeos, outGeom, 0, srid, *flag)) != MAL_SUCCEED) { @@ -875,8 +906,11 @@ geom_sfcgal_triangulate2DZ(wkb **res, wk msg = createException(MAL, "geom_sfcgal_triangulate2DZ", "sfcgal_to_geom failed:%s", ret); GDKfree(ret); return msg; + } else { + sfcgal_geometry_delete(outGeom); } *res = geos2wkb(outGeos); + GEOSGeom_destroy(outGeos); return MAL_SUCCEED; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list