<div dir="ltr">Hi Andre,<div><br></div><div>great, thanks for the help. I was able to use the mutex functions in the Erlang Driver and added them here</div><div><br></div><div><a href="https://github.com/cloudant/erl_spatial/blob/master/c_src/spatialindex.cc">https://github.com/cloudant/erl_spatial/blob/master/c_src/spatialindex.cc</a><br>
</div><div><br></div><div style>At the moment I am just creating a lock around all CsMap calls.</div><div style><br></div><div style>From your email and reading RFC 5 it seems that when I do an EPSG code lookup (as it uses the dictionary and has a static buffer) that I have to lock, and then for each transformation there is a property that says whether it is rentrant or not. It looks from the MapGuide code that I should also check for no-ops when source crs and target crs are the same.</div>
<div style><br></div><div style>It seems to be very quick even with my generic locks, the radius search is great.</div><div style><br></div><div style>thanks for the help.</div><div style><br></div><div style>Norman</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 9, 2013 at 2:44 AM, Andre Barth <span dir="ltr"><<a href="mailto:Andre.Barth@autodesk.com" target="_blank">Andre.Barth@autodesk.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Hi Norman,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">You’re right – CsMap uses a lot of static variables – that’s for historical reasons.<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">In particular, you cannot access the dictionaries from multiple threads – unless you’ve the appropriate locking mechanisms in place.<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Having said that, you can run most
<b>transformations</b> (and only such) in parallel though.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">As an example on how to use that CsMap, take a look at this file:<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><a href="http://svn.osgeo.org/mapguide/trunk/MgDev/Common/CoordinateSystem/CoordSysTransform.cpp" target="_blank">http://svn.osgeo.org/mapguide/trunk/MgDev/Common/CoordinateSystem/CoordSysTransform.cpp</a><u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Search for [</span><span style="font-size:11.0pt;font-family:"Courier New";color:#1f497d">m_bIsReentrant</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">]
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">(initialized in void CCoordinateSystemTransform::SetSourceAndTarget(MgCoordinateSystem* pSource, MgCoordinateSystem* pTarget))<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">and this type of code:<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1f497d">CriticalClass.Enter();<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1f497d">            status = TransformPoint3D (dCoords);<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1f497d">CriticalClass.Leave();</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Thanks,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">André<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> <a href="mailto:metacrs-bounces@lists.osgeo.org" target="_blank">metacrs-bounces@lists.osgeo.org</a> [mailto:<a href="mailto:metacrs-bounces@lists.osgeo.org" target="_blank">metacrs-bounces@lists.osgeo.org</a>]
<b>On Behalf Of </b>Norman Barker<br>
<b>Sent:</b> Thursday, May 9, 2013 2:25 AM<br>
<b>To:</b> <a href="mailto:metacrs@lists.osgeo.org" target="_blank">metacrs@lists.osgeo.org</a><br>
<b>Subject:</b> Re: [MetaCRS] CsMap Threading<u></u><u></u></span></p><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">I am guessing this is my issue <u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">/******* NOTE *****88  static array could cause multi-thread problems */<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">in const char* CSepsg2adskCS (long epsgNbr)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">oops, I will look more into this, but I am relieved to have found it.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Norman<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Wed, May 8, 2013 at 5:32 PM, Norman Barker <<a href="mailto:norman.barker@gmail.com" target="_blank">norman.barker@gmail.com</a>> wrote:<u></u><u></u></p>
<div>
<p class="MsoNormal">Hi,<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">when I start getting 20 threads or so into the CsMap library I get weird errors with retrieving ellipsoid and crs definitions such as <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Ellipsoid definition WGS84 does not exist.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">or <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"> is not a valid key name<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">(where I am guessing key has been interpreted as "")<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">which it does for the other threads. <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Any ideas? I am a little stumped. My next approach is to add more debug to CsMap.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">thanks,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Norman<u></u><u></u></p>
</div>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div></div></div>
</div>

</blockquote></div><br></div>