From svn_mapguide at osgeo.org Tue Apr 1 05:09:21 2025 From: svn_mapguide at osgeo.org (svn_mapguide at osgeo.org) Date: Tue, 1 Apr 2025 05:09:21 -0700 Subject: [mapguide-commits] r10129 - branches/4.0/MgDev/Common/MdfParser Message-ID: <20250401120922.122E61E52CE@trac.osgeo.org> Author: jng Date: 2025-04-01 05:09:19 -0700 (Tue, 01 Apr 2025) New Revision: 10129 Modified: branches/4.0/MgDev/Common/MdfParser/SAX2Parser.cpp Log: Fix mismatches from sloppy copypasta Modified: branches/4.0/MgDev/Common/MdfParser/SAX2Parser.cpp =================================================================== --- branches/4.0/MgDev/Common/MdfParser/SAX2Parser.cpp 2025-03-26 14:00:19 UTC (rev 10128) +++ branches/4.0/MgDev/Common/MdfParser/SAX2Parser.cpp 2025-04-01 12:09:19 UTC (rev 10129) @@ -78,6 +78,7 @@ delete m_printLayout; delete m_mapViewport; delete m_watermark; + delete m_tileset; delete m_profileResult; } @@ -94,6 +95,7 @@ m_printLayout = NULL; m_mapViewport = NULL; m_watermark = NULL; + m_tileset = NULL; m_profileResult = NULL; m_succeeded = false; } @@ -687,7 +689,7 @@ // set the version SetTileSetDefinitionVersion(attributes); - _ASSERT(m_map == NULL); // otherwise we leak + _ASSERT(m_tileset == NULL); // otherwise we leak m_tileset = new TileSetDefinition(); IOTileSetDefinition* IO = new IOTileSetDefinition(m_tileset, m_version); m_handlerStack->push(IO); From svn_mapguide at osgeo.org Tue Apr 1 05:10:46 2025 From: svn_mapguide at osgeo.org (svn_mapguide at osgeo.org) Date: Tue, 1 Apr 2025 05:10:46 -0700 Subject: [mapguide-commits] r10130 - in branches/4.0/MgDev: Oem/dbxml/dbxml/src/dbxml Server/src/Common/Manager Message-ID: <20250401121046.20FB61E57BF@trac.osgeo.org> Author: jng Date: 2025-04-01 05:10:45 -0700 (Tue, 01 Apr 2025) New Revision: 10130 Modified: branches/4.0/MgDev/Oem/dbxml/dbxml/src/dbxml/XmlInputStreamWrapper.hpp branches/4.0/MgDev/Server/src/Common/Manager/ServerManager.cpp branches/4.0/MgDev/Server/src/Common/Manager/WorkerThreadData.cpp branches/4.0/MgDev/Server/src/Common/Manager/WorkerThreadData.h Log: Fix new/delete mismatches as reported by asan. This required a minor structural change of MgWorkerThreadData Modified: branches/4.0/MgDev/Oem/dbxml/dbxml/src/dbxml/XmlInputStreamWrapper.hpp =================================================================== --- branches/4.0/MgDev/Oem/dbxml/dbxml/src/dbxml/XmlInputStreamWrapper.hpp 2025-04-01 12:09:19 UTC (rev 10129) +++ branches/4.0/MgDev/Oem/dbxml/dbxml/src/dbxml/XmlInputStreamWrapper.hpp 2025-04-01 12:10:45 UTC (rev 10130) @@ -62,10 +62,14 @@ } virtual ~XmlInputStreamWrapper() { delete is_; - if (publicId_) - delete publicId_; - if (systemId_) - delete systemId_; + if (publicId_) { + XERCES_CPP_NAMESPACE_QUALIFIER + XMLString::release(&publicId_); + } + if (systemId_) { + XERCES_CPP_NAMESPACE_QUALIFIER + XMLString::release(&systemId_); + } } virtual XERCES_CPP_NAMESPACE_QUALIFIER BinInputStream *makeStream() const { return new XmlBinStream(is_); @@ -75,14 +79,18 @@ virtual const XMLCh *getSystemId() const { return systemId_; } void setPublicId(const XMLCh* const id) { - if (publicId_) - delete publicId_; + if (publicId_) { + XERCES_CPP_NAMESPACE_QUALIFIER + XMLString::release(&publicId_); + } publicId_ = XERCES_CPP_NAMESPACE_QUALIFIER XMLString::replicate(id); } void setSystemId(const XMLCh* const id) { - if (systemId_) - delete systemId_; + if (systemId_) { + XERCES_CPP_NAMESPACE_QUALIFIER + XMLString::release(&systemId_); + } systemId_ = XERCES_CPP_NAMESPACE_QUALIFIER XMLString::replicate(id); } Modified: branches/4.0/MgDev/Server/src/Common/Manager/ServerManager.cpp =================================================================== --- branches/4.0/MgDev/Server/src/Common/Manager/ServerManager.cpp 2025-04-01 12:09:19 UTC (rev 10129) +++ branches/4.0/MgDev/Server/src/Common/Manager/ServerManager.cpp 2025-04-01 12:10:45 UTC (rev 10130) @@ -1633,8 +1633,12 @@ { // We want the worker thread pool to do some work for us MgWorkerThreadData* wtd; - ACE_NEW_NORETURN( wtd, MgWorkerThreadData( function ) ); + ACE_NEW_MALLOC_NORETURN(wtd, + static_cast(ACE_Allocator::instance()->malloc(sizeof(MgWorkerThreadData))), + MgWorkerThreadData()); + wtd->SetFunction(function); + ACE_Message_Block* mb; ACE_NEW_NORETURN( mb, ACE_Message_Block( wtd ) ); if(mb) Modified: branches/4.0/MgDev/Server/src/Common/Manager/WorkerThreadData.cpp =================================================================== --- branches/4.0/MgDev/Server/src/Common/Manager/WorkerThreadData.cpp 2025-04-01 12:09:19 UTC (rev 10129) +++ branches/4.0/MgDev/Server/src/Common/Manager/WorkerThreadData.cpp 2025-04-01 12:10:45 UTC (rev 10130) @@ -26,8 +26,8 @@ // // The constructor for the MgWorkerThreadData object. // -MgWorkerThreadData::MgWorkerThreadData( void (*function)() ) : - m_pFunction(function) +MgWorkerThreadData::MgWorkerThreadData( ) : + m_pFunction(nullptr) { }; @@ -38,3 +38,7 @@ MgWorkerThreadData::~MgWorkerThreadData() { }; + +void MgWorkerThreadData::SetFunction(void (*function)()) { + m_pFunction = function; +} Modified: branches/4.0/MgDev/Server/src/Common/Manager/WorkerThreadData.h =================================================================== --- branches/4.0/MgDev/Server/src/Common/Manager/WorkerThreadData.h 2025-04-01 12:09:19 UTC (rev 10129) +++ branches/4.0/MgDev/Server/src/Common/Manager/WorkerThreadData.h 2025-04-01 12:10:45 UTC (rev 10130) @@ -27,12 +27,13 @@ /////////////////////////////////////////////////////////////////////// /// Constructors/Destructors public: - MgWorkerThreadData( void (*function)() ); + MgWorkerThreadData(); virtual ~MgWorkerThreadData(); /////////////////////////////////////////////////////////////////////// /// Accessors public: + void SetFunction(void (*function)()); void (*m_pFunction)(); /////////////////////////////////////////////////////////////////////// From svn_mapguide at osgeo.org Tue Apr 1 08:08:13 2025 From: svn_mapguide at osgeo.org (svn_mapguide at osgeo.org) Date: Tue, 1 Apr 2025 08:08:13 -0700 Subject: [mapguide-commits] r10131 - in branches/4.0/MgDev/Server/src: Gws/GwsQueryEngine Services/Feature Services/Profiling UnitTesting Message-ID: <20250401150814.349EB1E91E3@trac.osgeo.org> Author: jng Date: 2025-04-01 08:08:12 -0700 (Tue, 01 Apr 2025) New Revision: 10131 Modified: branches/4.0/MgDev/Server/src/Gws/GwsQueryEngine/GwsFeatureQueryDefinition.cpp branches/4.0/MgDev/Server/src/Gws/GwsQueryEngine/GwsJoinQueryDefinition.cpp branches/4.0/MgDev/Server/src/Services/Feature/ServerFeatureReader.cpp branches/4.0/MgDev/Server/src/Services/Feature/ServerUpdateFeatures.cpp branches/4.0/MgDev/Server/src/Services/Profiling/ServerProfilingService.cpp branches/4.0/MgDev/Server/src/UnitTesting/TestFeatureService.cpp Log: Fix some memory leaks from a asan-instrumented debug run of the mgserver test suite on Linux Modified: branches/4.0/MgDev/Server/src/Gws/GwsQueryEngine/GwsFeatureQueryDefinition.cpp =================================================================== --- branches/4.0/MgDev/Server/src/Gws/GwsQueryEngine/GwsFeatureQueryDefinition.cpp 2025-04-01 12:10:45 UTC (rev 10130) +++ branches/4.0/MgDev/Server/src/Gws/GwsQueryEngine/GwsFeatureQueryDefinition.cpp 2025-04-01 15:08:12 UTC (rev 10131) @@ -85,9 +85,9 @@ FdoStringCollection* GWSFeatureQueryDefinition::FeatureSourceNames () { FdoStringCollection * fsnames = FdoStringCollection::Create (); - - if (m_classname.FeatureSource () != NULL && * m_classname.FeatureSource () != 0) { - fsnames->Add (m_classname.FeatureSource ()); + FdoString* fsname = m_classname.FeatureSource(); + if (fsname != NULL && * fsname != 0) { + fsnames->Add (fsname); } return fsnames; } Modified: branches/4.0/MgDev/Server/src/Gws/GwsQueryEngine/GwsJoinQueryDefinition.cpp =================================================================== --- branches/4.0/MgDev/Server/src/Gws/GwsQueryEngine/GwsJoinQueryDefinition.cpp 2025-04-01 12:10:45 UTC (rev 10130) +++ branches/4.0/MgDev/Server/src/Gws/GwsQueryEngine/GwsJoinQueryDefinition.cpp 2025-04-01 15:08:12 UTC (rev 10131) @@ -165,14 +165,16 @@ FdoStringCollection * fsnames = FdoStringCollection::Create (); int i; for (i = 0; lfsnames != NULL && i < lfsnames->GetCount (); i ++) { - if (! fsnames->Contains (lfsnames->GetItem (i))) { - fsnames->Add (lfsnames->GetString (i)); + FdoPtr lfsname = lfsnames->GetItem (i); + if (! fsnames->Contains (lfsname)) { + fsnames->Add (lfsname->GetString()); } } for (i = 0; rfsnames != NULL && i < rfsnames->GetCount (); i ++) { - if (! fsnames->Contains (rfsnames->GetItem (i))) { - fsnames->Add (rfsnames->GetString (i)); + FdoPtr rfsname = rfsnames->GetItem (i); + if (! fsnames->Contains (rfsname)) { + fsnames->Add (rfsname->GetString()); } } return fsnames; Modified: branches/4.0/MgDev/Server/src/Services/Feature/ServerFeatureReader.cpp =================================================================== --- branches/4.0/MgDev/Server/src/Services/Feature/ServerFeatureReader.cpp 2025-04-01 12:10:45 UTC (rev 10130) +++ branches/4.0/MgDev/Server/src/Services/Feature/ServerFeatureReader.cpp 2025-04-01 15:08:12 UTC (rev 10131) @@ -55,7 +55,7 @@ m_classDef = NULL; m_featureSet = NULL; m_connection = NULL; - m_fdoReader = NULL; + FDO_SAFE_RELEASE(m_fdoReader); m_removeFromPoolOnDestruction = false; } Modified: branches/4.0/MgDev/Server/src/Services/Feature/ServerUpdateFeatures.cpp =================================================================== --- branches/4.0/MgDev/Server/src/Services/Feature/ServerUpdateFeatures.cpp 2025-04-01 12:10:45 UTC (rev 10130) +++ branches/4.0/MgDev/Server/src/Services/Feature/ServerUpdateFeatures.cpp 2025-04-01 15:08:12 UTC (rev 10131) @@ -59,7 +59,7 @@ bool useTransaction) { Ptr propCol; - FdoITransaction* transaction = NULL; + FdoPtr transaction = NULL; bool commited = false; MG_FEATURE_SERVICE_TRY() Modified: branches/4.0/MgDev/Server/src/Services/Profiling/ServerProfilingService.cpp =================================================================== --- branches/4.0/MgDev/Server/src/Services/Profiling/ServerProfilingService.cpp 2025-04-01 12:10:45 UTC (rev 10130) +++ branches/4.0/MgDev/Server/src/Services/Profiling/ServerProfilingService.cpp 2025-04-01 15:08:12 UTC (rev 10131) @@ -64,7 +64,7 @@ // Start to profile the ProfileRenderDynamicOverlay process double renderMapStart = MgTimerUtil::GetTime(); - m_svcRendering->RenderDynamicOverlay(map, selection, options, pPRMResult.get()); + Ptr res = m_svcRendering->RenderDynamicOverlay(map, selection, options, pPRMResult.get()); double renderMapEnd = MgTimerUtil::GetTime(); pPRMResult->SetRenderTime(renderMapEnd - renderMapStart); @@ -103,7 +103,7 @@ // Start to profile the ProfileRenderMap process double renderMapStart = MgTimerUtil::GetTime(); - m_svcRendering->RenderMap(map, selection, center, scale, width, height, backgroundColor, format, bKeepSelection, pPRMResult.get()); + Ptr res = m_svcRendering->RenderMap(map, selection, center, scale, width, height, backgroundColor, format, bKeepSelection, pPRMResult.get()); double renderMapEnd = MgTimerUtil::GetTime(); pPRMResult->SetRenderTime(renderMapEnd - renderMapStart); Modified: branches/4.0/MgDev/Server/src/UnitTesting/TestFeatureService.cpp =================================================================== --- branches/4.0/MgDev/Server/src/UnitTesting/TestFeatureService.cpp 2025-04-01 12:10:45 UTC (rev 10130) +++ branches/4.0/MgDev/Server/src/UnitTesting/TestFeatureService.cpp 2025-04-01 15:08:12 UTC (rev 10131) @@ -2313,7 +2313,7 @@ Ptr insertCommand1 = new MgInsertFeatures(L"DaKlass", propCollection); commands->Add(insertCommand1); - pService->UpdateFeatures(featureSource, commands, pTransaction); + Ptr res = pService->UpdateFeatures(featureSource, commands, pTransaction); STRING sp = pTransaction->AddSavePoint(L"test"); STRING sp1 = pTransaction->AddSavePoint(L"test"); @@ -2330,7 +2330,7 @@ properties3->Add(prop); Ptr insertCommand2 = new MgInsertFeatures(L"DaKlass", properties3); commands->Add(insertCommand2); - pService->UpdateFeatures(featureSource, commands, pTransaction); + Ptr res2 = pService->UpdateFeatures(featureSource, commands, pTransaction); pTransaction->Rollback(sp); pTransaction->Commit(); @@ -2345,6 +2345,7 @@ { count++; } + reader->Close(); REQUIRE(count == 2); } } From svn_mapguide at osgeo.org Tue Apr 1 08:54:15 2025 From: svn_mapguide at osgeo.org (svn_mapguide at osgeo.org) Date: Tue, 1 Apr 2025 08:54:15 -0700 Subject: [mapguide-commits] r10132 - in branches/4.0/MgDev: Portable/MgPortable/Services Server/src/Services/Rendering Server/src/Services/Tile Server/src/UnitTesting Message-ID: <20250401155415.A91F21EA403@trac.osgeo.org> 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 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 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 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 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 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 resSvc = dynamic_cast(m_siteConnection->CreateService(MgServiceType::ResourceService)); - MdfModel::MapDefinition* mdf = MgMapBase::GetMapDefinition(resSvc, mdfres); + std::unique_ptr mdf(MgMapBase::GetMapDefinition(resSvc, mdfres)); MdfModel::TileSetSource* tsRef = mdf->GetTileSetSource(); Ptr 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 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 source = new MgByteSource((BYTE_ARRAY_IN)mbXml.c_str(), (INT32)mbXml.length()); Ptr content = source->GetReader(); mdfres = new MgResourceIdentifier(L"Library://UnitTests/Maps/LinkedTileSet2.MapDefinition");