On 08/10/2010 03:46 PM, Martin Dobias wrote:
I believe this can be fixed easily by testing whether the new shader
function isn't the same as the previous one in
setRasterShaderFunction(). Do you see any further scenarios that might
lead to a crash? Because deleting the shader function in the class
where it belongs is typically less prone to memory leaks or double
deletion.

Bye
Martin


Howdy Martin.

I think this is a good solution. I was thinking of the same approach.

Another potential situation that could lead to a crash would be sharing a custom shader between raster layers.

Without going into too much detail, say you wrote a custom app/plugin to display several adjacent rasters (maybe aerial images along a transect), and they all needed to be shaded the same way, with your custom shader. Right now, you can set the shader for all layers to the same shader and things would work ok until you changed the shader for any one layer. Granted there are external work arounds ( mosaics etc.) and you could just duplicate the shader for each layer as they are quite small, however reusing the shader seems like it should be an option for smaller memory devices -- and the color cache can actually get quite large depending on the type of image.

Safe pointers come to mind, but I think we may just be able to add an extra flag to the setRasterShaderFunction() that would allow you to override the delete on change functionality:

void QgsRasterShader::setRasterShaderFunction( QgsRasterShaderFunction*, bool deleteOnChange=true)

So calling setRasterShaderFunction( myFunc, false ) would mean that the next call to setRasterShaderFunction( ) would NOT attempt to free the point to the current shader function.

-pete

--
====================================
Peter J. Ersts, Software Developer
American Museum of Natural History
Center for Biodiversity and Conservation
Central Park West at 79th Street
New York, New York 10024
Web: http://biodiversityinformatics.amnh.org
Web: http://cbc.amnh.org

Open Source,
...evolving through community cooperation to change the world bit by bit

Quantum GIS Raster Development Team.

_______________________________________________
Qgis-developer mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to