[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