PostGIS  2.5.0dev-r@@SVN_REVISION@@
static int PrepGeomCacheCleaner ( GeomCache *  cache)
static

This function is passed into the generic GetGeomCache function in the case of a cache miss, so that it can free the particular indexed structure being managed.

In the case of prepared geometry, we want to leave the actual PrepGeomCache allocated and in place, but ensure that the GEOS Geometry and PreparedGeometry are freed so we don't leak memory as we transition from cache hit to miss to hit, etc.

Definition at line 396 of file lwgeom_geos_prepared.c.

References PrepGeomCache::argnum, PrepGeomCache::context_callback, PrepGeomCache::geom, PrepGeomHashEntry::geom, GetPrepGeomHashEntry(), LW_FAILURE, LW_SUCCESS, PrepGeomCache::prepared_geom, and PrepGeomHashEntry::prepared_geom.

397 {
398  PrepGeomHashEntry* pghe = 0;
399  PrepGeomCache* prepcache = (PrepGeomCache*)cache;
400 
401  if ( ! prepcache )
402  return LW_FAILURE;
403 
404  /*
405  * Clear out the references to the soon-to-be-freed GEOS objects
406  * from the callback hash entry
407  */
408  pghe = GetPrepGeomHashEntry(prepcache->context_callback);
409  if ( ! pghe )
410  {
411  lwpgerror("PrepGeomCacheCleaner failed to find hash entry for context %p", prepcache->context_callback);
412  return LW_FAILURE;
413  }
414  pghe->geom = 0;
415  pghe->prepared_geom = 0;
416 
417  /*
418  * Free the GEOS objects and free the index tree
419  */
420  POSTGIS_DEBUGF(3, "PrepGeomCacheFreeer: freeing %p argnum %d", prepcache, prepcache->argnum);
421  GEOSPreparedGeom_destroy( prepcache->prepared_geom );
422  GEOSGeom_destroy( (GEOSGeometry *)prepcache->geom );
423  prepcache->argnum = 0;
424  prepcache->prepared_geom = 0;
425  prepcache->geom = 0;
426 
427  return LW_SUCCESS;
428 }
const GEOSPreparedGeometry * prepared_geom
#define LW_SUCCESS
Definition: liblwgeom.h:79
#define LW_FAILURE
Definition: liblwgeom.h:78
const GEOSPreparedGeometry * prepared_geom
const GEOSGeometry * geom
const GEOSGeometry * geom
static PrepGeomHashEntry * GetPrepGeomHashEntry(MemoryContext mcxt)
MemoryContext context_callback

Here is the call graph for this function: