[mapguide-commits] r4438 - trunk/MgDev/Server/src/Services/Rendering
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Mon Dec 14 18:38:53 EST 2009
Author: waltweltonlair
Date: 2009-12-14 18:38:52 -0500 (Mon, 14 Dec 2009)
New Revision: 4438
Modified:
trunk/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp
Log:
Fix #1206 (Small memory leaks in MgServerRenderingService)
Make sure renderers are always deleted by wrapping them in auto_ptr's.
Modified: trunk/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp 2009-12-14 22:32:39 UTC (rev 4437)
+++ trunk/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp 2009-12-14 23:38:52 UTC (rev 4438)
@@ -227,7 +227,7 @@
// initialize the renderer (set clipping to false so that we label
// the unclipped geometry)
- SE_Renderer* dr = CreateRenderer(width, height, bgColor, false, true, tileExtentOffset);
+ auto_ptr<SE_Renderer> dr(CreateRenderer(width, height, bgColor, false, true, tileExtentOffset));
// create a temporary collection containing all the layers for the base group
Ptr<MgLayerCollection> layers = map->GetLayers();
@@ -245,10 +245,8 @@
baseGroup->SetVisible(true);
// call the internal helper API to do all the stylization overhead work
- ret = RenderMapInternal(map, NULL, roLayers, dr, width, height, format, scale, extent, true, true);
+ ret = RenderMapInternal(map, NULL, roLayers, dr.get(), width, height, format, scale, extent, true, true);
- delete dr;
-
// restore the base group's visibility
baseGroup->SetVisible(groupVisible);
@@ -321,7 +319,7 @@
bgColor.alpha() = 0;
// initialize the renderer
- SE_Renderer* dr = CreateRenderer(width, height, bgColor, true);
+ auto_ptr<SE_Renderer> dr(CreateRenderer(width, height, bgColor, true));
// create a temporary collection containing all the dynamic layers
Ptr<MgLayerCollection> layers = map->GetLayers();
@@ -335,10 +333,8 @@
}
// call the internal helper API to do all the stylization overhead work
- ret = RenderMapInternal(map, selection, roLayers, dr, width, height, scale, extent, false, options);
+ ret = RenderMapInternal(map, selection, roLayers, dr.get(), width, height, scale, extent, false, options);
- delete dr;
-
MG_CATCH_AND_THROW(L"MgServerRenderingService.RenderDynamicOverlay")
return ret.Detach();
@@ -490,13 +486,11 @@
// initialize the renderer with the rendering canvas size - in this
// case it is not necessarily the same size as the requested image
// size due to support for non-square pixels
- SE_Renderer* dr = CreateRenderer(drawWidth, drawHeight, bgcolor, false);
+ auto_ptr<SE_Renderer> dr(CreateRenderer(drawWidth, drawHeight, bgcolor, false));
// call the internal helper API to do all the stylization overhead work
- ret = RenderMapInternal(map, selection, NULL, dr, width, height, format, scale, b, false, bKeepSelection);
+ ret = RenderMapInternal(map, selection, NULL, dr.get(), width, height, format, scale, b, false, bKeepSelection);
- delete dr;
-
MG_CATCH_AND_THROW(L"MgServerRenderingService.RenderMap")
return ret.Detach();
@@ -576,13 +570,11 @@
backgroundColor->GetAlpha());
// initialize the appropriate map renderer
- SE_Renderer* dr = CreateRenderer(width, height, bgcolor, bClip);
+ auto_ptr<SE_Renderer> dr(CreateRenderer(width, height, bgcolor, bClip));
// call the internal helper API to do all the stylization overhead work
- ret = RenderMapInternal(map, selection, NULL, dr, width, height, format, scale, b, false, bKeepSelection);
+ ret = RenderMapInternal(map, selection, NULL, dr.get(), width, height, format, scale, b, false, bKeepSelection);
- delete dr;
-
MG_CATCH_AND_THROW(L"MgServerRenderingService.RenderMap")
return ret.Detach();
@@ -623,7 +615,7 @@
double point_buf[2];
double* point = NULL;
- SE_Renderer* impRenderer = NULL;
+ auto_ptr<SE_Renderer> impRenderer;
if (geometry && maxFeatures == 1)
{
MgPolygon* polygon = dynamic_cast<MgPolygon*>(geometry);
@@ -657,18 +649,15 @@
point = point_buf;
RS_Color bgColor; // not used
- impRenderer = CreateRenderer(1, 1, bgColor, false);
+ impRenderer.reset(CreateRenderer(1, 1, bgColor, false));
}
}
}
- FeatureInfoRenderer fir(sel, maxFeatures, map->GetViewScale(), point, impRenderer);
+ FeatureInfoRenderer fir(sel, maxFeatures, map->GetViewScale(), point, impRenderer.get());
RenderForSelection(map, layerNames, geometry, selectionVariant, featureFilter, maxFeatures, layerAttributeFilter, &fir);
- if (impRenderer)
- delete impRenderer;
-
//fill out the output object with the info we collected
//in the FeatureInfoRenderer for the first feature we hit
if (fir.GetNumFeaturesProcessed() > 0)
@@ -962,7 +951,7 @@
backgroundColor->GetAlpha());
//initialize a renderer
- Renderer* dr = CreateRenderer(width, height, bgcolor, false, false, 0.0);
+ auto_ptr<Renderer> dr(CreateRenderer(width, height, bgcolor, false, false, 0.0));
RS_Bounds b(0,0,width,height);
@@ -993,9 +982,9 @@
auto_ptr<RS_ByteData> data;
if (wcscmp(m_rendererName.c_str(), L"AGG") == 0)
- data.reset(((AGGRenderer*)dr)->Save(format, width, height));
+ data.reset(((AGGRenderer*)dr.get())->Save(format, width, height));
else
- data.reset(((GDRenderer*)dr)->Save(format, width, height));
+ data.reset(((GDRenderer*)dr.get())->Save(format, width, height));
if (NULL != data.get())
{
@@ -1014,8 +1003,6 @@
ret = bs->GetReader();
}
- delete dr;
-
MG_CATCH_AND_THROW(L"MgServerRenderingService.RenderMapLegend")
return ret.Detach();
More information about the mapguide-commits
mailing list