[postgis-commits] svn - r3019 - trunk/lwgeom

postgis-commits at postgis.refractions.net postgis-commits at postgis.refractions.net
Fri Sep 26 14:34:31 PDT 2008


Author: pramsey
Date: 2008-09-26 14:34:31 -0700 (Fri, 26 Sep 2008)
New Revision: 3019

Modified:
   trunk/lwgeom/lwgeom_geos_c.c
Log:
Make preparedgeometry memory handling a good deal kinder (no longer losing base geometry every time)


Modified: trunk/lwgeom/lwgeom_geos_c.c
===================================================================
--- trunk/lwgeom/lwgeom_geos_c.c	2008-09-26 21:01:24 UTC (rev 3018)
+++ trunk/lwgeom/lwgeom_geos_c.c	2008-09-26 21:34:31 UTC (rev 3019)
@@ -3422,6 +3422,7 @@
 	int32					key2;
     int32                   argnum;
 	GEOSPreparedGeometry    *prepared_geom;
+	GEOSGeometry			*geom;
 } PREPARED_GEOM_CACHE;
 
 
@@ -3444,8 +3445,7 @@
  *   key into cache
  *   clear prepared cache
  */
-PREPARED_GEOM_CACHE 
-*get_prepared_geometry_cache( 
+PREPARED_GEOM_CACHE * get_prepared_geometry_cache( 
 	PREPARED_GEOM_CACHE *cache, 
 	PG_LWGEOM *serialized_geom1, PG_LWGEOM *serialized_geom2,
 	int32 key1, int32 key2 )
@@ -3455,6 +3455,7 @@
 	{
 		cache = lwalloc( sizeof(PREPARED_GEOM_CACHE) );
 		cache->prepared_geom = 0;
+		cache->geom = 0;
         cache->argnum = 0;
 		cache->key1 = 0;
 		cache->key2 = 0;
@@ -3465,6 +3466,7 @@
 		if ( !cache->prepared_geom )
 		{
 			GEOSGeom g = POSTGIS2GEOS( serialized_geom1 );
+			cache->geom = g; 
 			cache->prepared_geom = GEOSPrepare( g );
             cache->argnum = 1;
 			LWDEBUG(3, "get_prepared_geometry_cache: preparing obj in argument 1");
@@ -3479,6 +3481,7 @@
 		if ( !cache->prepared_geom )
 		{
 			GEOSGeom g = POSTGIS2GEOS( serialized_geom2 );
+			cache->geom = g; 
 			cache->prepared_geom = GEOSPrepare( g );
             cache->argnum = 2;
 			LWDEBUG(3, "get_prepared_geometry_cache: preparing obj in argument 2");
@@ -3492,7 +3495,9 @@
 	{
 		LWDEBUG(3, "get_prepared_geometry_cache: obj NOT in cache");
 		GEOSPreparedGeom_destroy( cache->prepared_geom );
+		GEOSGeom_destroy( cache->geom ); 
 		cache->prepared_geom = 0;
+		cache->geom = 0;
         cache->argnum = 0;
 	}
 
@@ -3519,7 +3524,7 @@
 	BOX2DFLOAT4 			box1, box2;
 	PREPARED_GEOM_CACHE *	prep_cache;
 	MemoryContext 			old_context;
-	int32					key1, key2;
+	int32					key1;
 
 	geom1 = (PG_LWGEOM *)  PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
 	geom2 = (PG_LWGEOM *)  PG_DETOAST_DATUM(PG_GETARG_DATUM(1));



More information about the postgis-commits mailing list