[mapguide-commits] r5551 - sandbox/adsk/2.3r/Common/CoordinateSystem

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Tue Feb 15 18:21:53 EST 2011


Author: brucedechant
Date: 2011-02-15 15:21:53 -0800 (Tue, 15 Feb 2011)
New Revision: 5551

Modified:
   sandbox/adsk/2.3r/Common/CoordinateSystem/CoordSysFormatConverter.cpp
Log:
Fix for trac ticket 1600 - Threading error with CodeToWkt() method
http://trac.osgeo.org/mapguide/ticket/1600

Notes:
- Added critical section around non-thread safe API


Modified: sandbox/adsk/2.3r/Common/CoordinateSystem/CoordSysFormatConverter.cpp
===================================================================
--- sandbox/adsk/2.3r/Common/CoordinateSystem/CoordSysFormatConverter.cpp	2011-02-15 20:17:07 UTC (rev 5550)
+++ sandbox/adsk/2.3r/Common/CoordinateSystem/CoordSysFormatConverter.cpp	2011-02-15 23:21:53 UTC (rev 5551)
@@ -438,7 +438,7 @@
         throw new MgInvalidArgumentException(L"MgCoordinateSystemFormatConverter.CodeToWkt", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
-    const char* szMsiName=NULL;
+    std::string szMsiName;
     std::string strName;
 
     //if input is EPSG
@@ -467,8 +467,10 @@
             //viewed from the outside of public API
             //The mapping from Adsk name to Msi is done internally inside
             //the method CSepsg2adskCS
+            CriticalClass.Enter();
             szMsiName=CSepsg2adskCS(lEpsg);
-            if (!szMsiName)
+            CriticalClass.Leave();
+            if (szMsiName.empty())
             {
                 return L"";
             }
@@ -484,8 +486,8 @@
         strName=pszCsSource;
         delete[] pszCsSource;
         ReformatOldArbitraryName(strName);
-        szMsiName=strName.c_str();
-        if (!szMsiName)
+        szMsiName=strName;
+        if (szMsiName.empty())
         {
             return L"";
         }
@@ -500,7 +502,7 @@
     char csWktBufr [2048];
 
     //is it an arbitrary system, one that uses NERTH projection?
-    wchar_t* wszMsiName=Convert_Ascii_To_Wide(szMsiName);
+    wchar_t* wszMsiName=Convert_Ascii_To_Wide(szMsiName.c_str());
     if (!wszMsiName)
     {
         throw new MgOutOfMemoryException(L"MgCoordinateSystemFormatConverter.CodeToWkt", __LINE__, __WFILE__, NULL, L"", NULL);
@@ -523,7 +525,7 @@
     else
     {
         SmartCriticalClass critical(true);
-        if (0==CS_cs2Wkt(csWktBufr,sizeof(csWktBufr),szMsiName,GetWktFlavor(nWktFlavor)))
+        if (0==CS_cs2Wkt(csWktBufr,sizeof(csWktBufr),szMsiName.c_str(),GetWktFlavor(nWktFlavor)))
         {
             wchar_t* wszWkt=Convert_Ascii_To_Wide(csWktBufr);
             if (!wszWkt)



More information about the mapguide-commits mailing list