On vendredi 21 avril 2017 10:57:16 CEST Sean Gillies wrote:
> Hi all,
> 
> I've written some C code (in one of Fiona's extension modules) that
> 
> 1. sets a OGRSpatialReferenceH using OSRSetFromUserInput()
> 2. passes this OGRSpatialReferenceH to GDALDatasetCreateLayer()
> 3. frees the OGRSpatialReferenceH using OSRDestroySpatialReference()

Please use OSRRelease() instead. It is always safe to use in all situations 
where you would use 
OSRDestroySpatialReference().

> 4. adds feature definitions and features to the layer
> 4. calls GDALClose() on the layer's dataset
> 
> When using the Shapefile driver, this code always works. When using the
> GPKG driver on Mac OS X and Windows (reports at
> https://github.com/Toblerity/Fiona/issues/441) sporadic crashes occur in
> OGRSpatialReference::Release() as the dataset is closed and the table,
> feature definition, and geometry field definition is torn down.
> 
> Does a created layer take ownership of the OGRSpatialReferenceH?
> What's the
> difference in the implementation of Shapefile and GPKG layers?

The shapefile driver clones the passed object, whereas the GPKG only increments 
the 
reference counter. The ownership contract in the doc was not mentionned. I've 
just added """ 
The driver might only increase
the reference counter of the object to take ownership, and not make a full copy,
so do not use OSRDestroySpatialReference(), but OSRRelease() instead when you
are done with the object."""

Even

-- 
Spatialys - Geospatial professional services
http://www.spatialys.com
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to