[mapguide-commits] r10132 - in branches/4.0/MgDev: Portable/MgPortable/Services Server/src/Services/Rendering Server/src/Services/Tile Server/src/UnitTesting

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Tue Apr 1 08:54:15 PDT 2025


Author: jng
Date: 2025-04-01 08:54:13 -0700 (Tue, 01 Apr 2025)
New Revision: 10132

Modified:
   branches/4.0/MgDev/Portable/MgPortable/Services/RenderingService.cpp
   branches/4.0/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp
   branches/4.0/MgDev/Server/src/Services/Tile/ServerTileService.cpp
   branches/4.0/MgDev/Server/src/UnitTesting/TestMdfModel.cpp
   branches/4.0/MgDev/Server/src/UnitTesting/TestTileService.cpp
Log:
Plug a major source of MdfModel memory leaks discovered from an ASAN-instrumented debug test run of mgserver test suite on Linux

Modified: branches/4.0/MgDev/Portable/MgPortable/Services/RenderingService.cpp
===================================================================
--- branches/4.0/MgDev/Portable/MgPortable/Services/RenderingService.cpp	2025-04-01 15:08:12 UTC (rev 10131)
+++ branches/4.0/MgDev/Portable/MgPortable/Services/RenderingService.cpp	2025-04-01 15:54:13 UTC (rev 10132)
@@ -1765,13 +1765,13 @@
         {
             WatermarkInstance* instance = watermarkInstances.GetAt(i);
             STRING resourceId = instance->GetResourceId();
-            WatermarkDefinition* wdef = NULL;
+            std::unique_ptr<WatermarkDefinition> wdef;
             MG_TRY()
                 for(int j = 0; j < watermarkIds.GetCount(); j++)
                 {
                     if(resourceId == watermarkIds.GetItem(j))
                     {
-                        wdef = MgWatermark::GetWatermarkDefinition(watermarkDefinitions.GetItem(j));
+                        wdef.reset(MgWatermark::GetWatermarkDefinition(watermarkDefinitions.GetItem(j)));
                         break;
                     }
                 }
@@ -1794,7 +1794,7 @@
                     STRING content = reader->ToString();
                     watermarkIds.Add(resourceId);
                     watermarkDefinitions.Add(content);
-                    wdef = MgWatermark::GetWatermarkDefinition(content);
+                    wdef.reset(MgWatermark::GetWatermarkDefinition(content));
                 }
                 assert(wdef != NULL);
                 if (instance->GetPositionOverride())

Modified: branches/4.0/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp
===================================================================
--- branches/4.0/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp	2025-04-01 15:08:12 UTC (rev 10131)
+++ branches/4.0/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp	2025-04-01 15:54:13 UTC (rev 10132)
@@ -2082,13 +2082,13 @@
         {
             WatermarkInstance* instance = watermarkInstances.GetAt(i);
             STRING resourceId = instance->GetResourceId();
-            WatermarkDefinition* wdef = NULL;
+            std::unique_ptr<WatermarkDefinition> wdef;
             MG_TRY()
                 for(int j = 0; j < watermarkIds.GetCount(); j++)
                 {
                     if(resourceId == watermarkIds.GetItem(j))
                     {
-                        wdef = MgWatermark::GetWatermarkDefinition(watermarkDefinitions.GetItem(j));
+                        wdef.reset(MgWatermark::GetWatermarkDefinition(watermarkDefinitions.GetItem(j)));
                         break;
                     }
                 }
@@ -2111,7 +2111,7 @@
                     STRING content = reader->ToString();
                     watermarkIds.Add(resourceId);
                     watermarkDefinitions.Add(content);
-                    wdef = MgWatermark::GetWatermarkDefinition(content);
+                    wdef.reset(MgWatermark::GetWatermarkDefinition(content));
                 }
                 assert(wdef != NULL);
                 if (instance->GetPositionOverride())
@@ -2122,7 +2122,7 @@
                 {
                     wdef->AdoptAppearance(instance->OrphanAppearanceOverride());
                 }
-                ds->StylizeWatermark(dr, wdef, drawWidth, drawHeight, saveWidth, saveHeight);
+                ds->StylizeWatermark(dr, wdef.get(), drawWidth, drawHeight, saveWidth, saveHeight);
                 
                 if(NULL != pPRWsResult)
                 {

Modified: branches/4.0/MgDev/Server/src/Services/Tile/ServerTileService.cpp
===================================================================
--- branches/4.0/MgDev/Server/src/Services/Tile/ServerTileService.cpp	2025-04-01 15:08:12 UTC (rev 10131)
+++ branches/4.0/MgDev/Server/src/Services/Tile/ServerTileService.cpp	2025-04-01 15:54:13 UTC (rev 10132)
@@ -512,10 +512,10 @@
             throw new MgException(MgExceptionCodes::MgXmlParserException, L"MgServerTileService.GetTileCache", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
 
-        MdfModel::TileSetDefinition* tileset = parser.DetachTileSetDefinition();
+        std::unique_ptr<MdfModel::TileSetDefinition> tileset(parser.DetachTileSetDefinition());
         assert(NULL != tileset);
         
-        cache = GetTileCache(resource, tileset);
+        cache = GetTileCache(resource, tileset.get());
     }
 
     MG_CATCH_AND_THROW(L"MgServerTileService.GetTileCache")

Modified: branches/4.0/MgDev/Server/src/UnitTesting/TestMdfModel.cpp
===================================================================
--- branches/4.0/MgDev/Server/src/UnitTesting/TestMdfModel.cpp	2025-04-01 15:08:12 UTC (rev 10131)
+++ branches/4.0/MgDev/Server/src/UnitTesting/TestMdfModel.cpp	2025-04-01 15:54:13 UTC (rev 10132)
@@ -764,7 +764,7 @@
         parser.ParseString((const char*)bytes->Bytes(), bytes->GetLength());
 
         REQUIRE(parser.GetSucceeded());
-        MdfModel::TileSetDefinition* tileset = parser.DetachTileSetDefinition();
+        std::unique_ptr<MdfModel::TileSetDefinition> tileset(parser.DetachTileSetDefinition());
         REQUIRE(nullptr != tileset);
 
         MdfModel::TileStoreParameters* tilesetParams = tileset->GetTileStoreParameters();
@@ -878,7 +878,7 @@
         parser.ParseString((const char*)bytes->Bytes(), bytes->GetLength());
 
         REQUIRE(parser.GetSucceeded());
-        MdfModel::TileSetDefinition* tileset = parser.DetachTileSetDefinition();
+        std::unique_ptr<MdfModel::TileSetDefinition> tileset(parser.DetachTileSetDefinition());
         REQUIRE(nullptr != tileset);
 
         MdfModel::TileStoreParameters* tilesetParams = tileset->GetTileStoreParameters();

Modified: branches/4.0/MgDev/Server/src/UnitTesting/TestTileService.cpp
===================================================================
--- branches/4.0/MgDev/Server/src/UnitTesting/TestTileService.cpp	2025-04-01 15:08:12 UTC (rev 10131)
+++ branches/4.0/MgDev/Server/src/UnitTesting/TestTileService.cpp	2025-04-01 15:54:13 UTC (rev 10132)
@@ -100,7 +100,7 @@
     // Parse the Map Definition and modify it so it matches its linked tile set
     Ptr<MgResourceService> resSvc = dynamic_cast<MgResourceService*>(m_siteConnection->CreateService(MgServiceType::ResourceService));
 
-    MdfModel::MapDefinition* mdf = MgMapBase::GetMapDefinition(resSvc, mdfres);
+    std::unique_ptr<MdfModel::MapDefinition> mdf(MgMapBase::GetMapDefinition(resSvc, mdfres));
     MdfModel::TileSetSource* tsRef = mdf->GetTileSetSource();
 
     Ptr<MgResourceIdentifier> tileSetId = new MgResourceIdentifier(tsRef->GetResourceId());
@@ -112,7 +112,7 @@
     parser.ParseString((const char*)bytes->Bytes(), bytes->GetLength());
 
     REQUIRE(parser.GetSucceeded());
-    MdfModel::TileSetDefinition* tsd = parser.DetachTileSetDefinition();
+    std::unique_ptr<MdfModel::TileSetDefinition> tsd(parser.DetachTileSetDefinition());
     // Update coordinate systems to match
     STRING csWkt;
     MdfModel::NameStringPairCollection* params = tsd->GetTileStoreParameters()->GetParameters();
@@ -137,7 +137,7 @@
 
     // Save back out to XML
     MdfModel::Version ver(3, 0, 0);
-    std::string mbXml = parser.SerializeToXML(mdf, &ver);
+    std::string mbXml = parser.SerializeToXML(mdf.get(), &ver);
     Ptr<MgByteSource> source = new MgByteSource((BYTE_ARRAY_IN)mbXml.c_str(), (INT32)mbXml.length());
     Ptr<MgByteReader> content = source->GetReader();
     mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinkedTileSet2.MapDefinition");



More information about the mapguide-commits mailing list