[geos-devel] Thread safety issues

Even Rouault even.rouault at spatialys.com
Thu Jun 29 14:35:39 PDT 2017


On jeudi 29 juin 2017 23:19:30 CEST Tamas Szekeres wrote:
> Dear developers,
> 
> We have encountered thread safety issues when invoking the geos C api from
> multiple threads on a site with strong traffic.
> 
> Specifically CLocalizer is using std::setlocale which is not thread safe. (
> http://en.cppreference.com/w/cpp/locale/setlocale). Do we have a workaround
> to this?

This strongly reminds me of similar issues we have hit in GDAL and proj.4

In GDAL, we've now a CPLThreadLocaleC class that use Linux & Windows thread-locale 
specific API to force the C locale when available, and otherwise default to a setlocale() call 
protected by a mutex (which only protects 2 concurrent calls to setlocale(), but not a 
setlocale() with a printf())

See
https://github.com/OSGeo/gdal/blob/trunk/gdal/port/cpl_conv.cpp#L2785
https://github.com/OSGeo/gdal/blob/trunk/gdal/port/cpl_conv.cpp#L2843

But ultimately I ended up rewriting my CPLvsnprintf() to avoid messing up with the C locale, 
and just using vsnprintf() with a later replacing of the comma by decimal point (I guess this 
must be the use case in GEOS too ?) :
https://github.com/OSGeo/gdal/blob/trunk/gdal/port/cpl_string.cpp#L1119

And similarly for CPLsscanf() :
https://github.com/OSGeo/gdal/blob/trunk/gdal/port/cpl_string.cpp#L1430


Not sure if those are the best way of addressing the issue (I'd wish there would be API using 
always the C-locale), but they are now rather well proven.

Even

-- 
Spatialys - Geospatial professional services
http://www.spatialys.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/geos-devel/attachments/20170629/bebb2369/attachment.html>


More information about the geos-devel mailing list