From df42fcde560a9706fd9323a5f5307512407fec9f Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Fri, 27 Aug 2010 22:05:15 +0000 Subject: [PATCH] locking is required around pj_init_plus (partial revert of 2063) as it appears pj_init_plus will fail under high concurrent load even with proj 4.7.0 (only seen when reprojecting data) and will likely require use of a context (available in next release) if we wish to remove locks --- CHANGELOG | 8 ++++---- src/projection.cpp | 10 +++++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 5fa304572..c12976d9d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -24,7 +24,7 @@ Mapnik Trunk - Added xinclude (http://www.w3.org/TR/xinclude/) support to libxml2-based xml parser (oldtopos) (#567) -- Optimized rendering speeds by avoiding locking in the projection code (r2063) +- Optimized rendering speeds by avoiding locking in the projection code (r2063) (r2713) - Added support for setting global alignment of polygon pattern fills (#203) @@ -47,7 +47,7 @@ Mapnik Trunk - PNG: fixed png256 for large images and some improvements to reduce color corruptions (#522) -- Implement MarkersSymbolizer in Cairo render and improve the markers placementfinder. (#553) +- Implement MarkersSymbolizer in Cairo render and improve the markers placement finder. (#553) Mapnik 0.7.0 Release @@ -115,9 +115,9 @@ Mapnik 0.7.0 Release - Shape Plugin: Fixed missing compiler flags that causes crashing on newer g++ versions (#436) -- PNG: Fixed problem with garbled/striped png256 output along sharpe edges(#416,#445,#447,#202) +- PNG: Fixed problem with garbled/striped png256 output along sharp edges(#416,#445,#447,#202) -- PNG: Added support for semitransparency in png256 output (#477,#202) +- PNG: Added support for semi-transparency in png256 output (#477,#202) - PolygonSymbolizer: Added 'gamma' attribute to allow for dilation of polygon edges - a solution to gap artifacts or "ghost lines" between adjacent polygons and allows for slight sharpening of diff --git a/src/projection.cpp b/src/projection.cpp index e4aa0fb39..51500d43d 100644 --- a/src/projection.cpp +++ b/src/projection.cpp @@ -124,10 +124,14 @@ projection::~projection() void projection::init() { -// http://trac.osgeo.org/proj/wiki/ThreadSafety -#if PJ_VERSION < 470 && MAPNIK_THREADSAFE +// Based on http://trac.osgeo.org/proj/wiki/ThreadSafety +// you could think pj_init was threadsafe in version 4.7.0 +// but its certainly not, and must only be in >= 4.7 with +// usage of projCtx per thread +//#if PJ_VERSION < 470 && MAPNIK_THREADSAFE +// mutex::scoped_lock lock(mutex_); +//#endif mutex::scoped_lock lock(mutex_); -#endif proj_=pj_init_plus(params_.c_str()); if (!proj_) throw proj_init_error(params_); is_geographic_ = pj_is_latlong(proj_) ? true : false;