From 6744ec95a9a5653fff2f8ba21bfbfc8bb82c9ef5 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 24 Aug 2016 01:05:01 +0100 Subject: [PATCH] DynamicTextureModule memory leaks --- .../DynamicTexture/DynamicTextureModule.cs | 75 ++++++++++--------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs b/OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs index a686a4d730..665d7f7dac 100644 --- a/OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs @@ -553,37 +553,44 @@ namespace OpenSim.Region.CoreModules.Scripting.DynamicTexture ManagedImage managedImage; Image image; - if (OpenJPEG.DecodeToImage(frontImage, out managedImage, out image)) + if (!OpenJPEG.DecodeToImage(frontImage, out managedImage, out image) || image == null) + return null; + + Bitmap image1 = new Bitmap(image); + image.Dispose(); + + if (!OpenJPEG.DecodeToImage(backImage, out managedImage, out image) || image == null) { - Bitmap image1 = new Bitmap(image); - - if (OpenJPEG.DecodeToImage(backImage, out managedImage, out image)) - { - Bitmap image2 = new Bitmap(image); - - if (setNewAlpha) - SetAlpha(ref image1, newAlpha); - - Bitmap joint = MergeBitMaps(image1, image2); - - byte[] result = new byte[0]; - - try - { - result = OpenJPEG.EncodeFromImage(joint, true); - } - catch (Exception e) - { - m_log.ErrorFormat( - "[DYNAMICTEXTUREMODULE]: OpenJpeg Encode Failed. Exception {0}{1}", - e.Message, e.StackTrace); - } - - return result; - } + image1.Dispose(); + return null; } - return null; + Bitmap image2 = new Bitmap(image); + image.Dispose(); + + if (setNewAlpha) + SetAlpha(ref image1, newAlpha); + + using(Bitmap joint = MergeBitMaps(image1, image2)) + { + image1.Dispose(); + image2.Dispose(); + + byte[] result = new byte[0]; + + try + { + result = OpenJPEG.EncodeFromImage(joint, true); + } + catch (Exception e) + { + m_log.ErrorFormat( + "[DYNAMICTEXTUREMODULE]: OpenJpeg Encode Failed. Exception {0}{1}", + e.Message, e.StackTrace); + } + + return result; + } } public Bitmap MergeBitMaps(Bitmap front, Bitmap back) @@ -592,12 +599,12 @@ namespace OpenSim.Region.CoreModules.Scripting.DynamicTexture Graphics jG; joint = new Bitmap(back.Width, back.Height, PixelFormat.Format32bppArgb); - jG = Graphics.FromImage(joint); - - jG.DrawImage(back, 0, 0, back.Width, back.Height); - jG.DrawImage(front, 0, 0, back.Width, back.Height); - - return joint; + using(jG = Graphics.FromImage(joint)) + { + jG.DrawImage(back, 0, 0, back.Width, back.Height); + jG.DrawImage(front, 0, 0, back.Width, back.Height); + return joint; + } } private void SetAlpha(ref Bitmap b, byte alpha)