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

Reply via email to