Hi All
my question is
starting from gdal-3.x OGRCoordinateTransformation object (::Transform() in particular) is not intended to be used by multiple threads?
With gdal-2.4 it worked fine.
details:
We have upgraded from using gdal-2.4.3 to gdal-3.1.2 and started to get crashes in multi-threaded code with this stack
#3 OGRSpatialReference::GetAxis(char const*, int, OGRAxisOrientation*) const gdal-3.1.2/ogr/ogrspatialreference.cpp:9603
#4 OGRProjCT::Transform(int, double*, double*, double*, double*, int*) gdal-3.1.2/ogr/ogrct.cpp:1686
#5 OGRCoordinateTransformation::Transform(int, double*, double*, double*, int*) gdal-3.1.2/ogr/ogrct.cpp:1487
#4 OGRProjCT::Transform(int, double*, double*, double*, double*, int*) gdal-3.1.2/ogr/ogrct.cpp:1686
#5 OGRCoordinateTransformation::Transform(int, double*, double*, double*, int*) gdal-3.1.2/ogr/ogrct.cpp:1487
ogrspatialreference.cpp:9603 line is const char * assignment to CPLString
d->m_osAxisName[iAxis] = pszName;
all threads are using the same OGRCoordinateTransformation object and here race between multiple threads could produce double-free (#1-#2 part of stack)
with gdal-2.4.3 it looked different
OGRProj4CT::Transform was not calling GetAxis
and even GetAxis itself did not use temporary libproj context with axis name, but only it's internal structure
Regards
Maxim
_______________________________________________ gdal-dev mailing list [email protected] https://lists.osgeo.org/mailman/listinfo/gdal-dev
