[banshee] More disposing



commit 39a1c12c1c596611960bdac42f084db7fcc89cf0
Author: Alexander Kojevnikov <alexander kojevnikov com>
Date:   Sat Feb 13 14:54:28 2010 +1100

    More disposing

 .../XmlConfigurationClient.cs                      |   15 ++--
 .../Banshee.Collection/RescanPipeline.cs           |   75 ++++++++++---------
 .../Banshee.Metadata/MetadataServiceJob.cs         |    6 +-
 .../Banshee.Playlists.Formats/AsxPlaylistFormat.cs |    8 ++-
 .../Banshee.Playlists.Formats/PlaylistParser.cs    |    9 ++-
 .../Banshee.Collection.Gui/ColumnCellAlbum.cs      |    4 +
 .../Banshee.Collection.Gui/XmlColumnController.cs  |   10 ++--
 .../Banshee.Gui.Dialogs/ImageFileChooserDialog.cs  |    5 +-
 .../Banshee.Sources.Gui/SourceRowRenderer.cs       |    8 ++
 .../Banshee.Dap.Gui/LibrarySyncOptions.cs          |    2 +
 .../Banshee.CoverArt/CoverArtService.cs            |    1 +
 .../Banshee.Podcasting.Gui/ColumnCellPodcast.cs    |    4 +
 .../Hyena.Data.Sqlite/HyenaSqliteConnection.cs     |    4 +
 13 files changed, 91 insertions(+), 60 deletions(-)
---
diff --git a/src/Core/Banshee.Core/Banshee.Configuration/XmlConfigurationClient.cs b/src/Core/Banshee.Core/Banshee.Configuration/XmlConfigurationClient.cs
index 2823a40..1305899 100644
--- a/src/Core/Banshee.Core/Banshee.Configuration/XmlConfigurationClient.cs
+++ b/src/Core/Banshee.Core/Banshee.Configuration/XmlConfigurationClient.cs
@@ -103,8 +103,9 @@ namespace Banshee.Configuration
                 foreach(XmlNode node in namespace_node.ChildNodes) {
                     if(node.Attributes[tag_identifier_attribute_name].Value == key && node.Name == value_tag_name) {
                         XmlSerializer serializer = new XmlSerializer(typeof(T));
-                        StringReader reader = new StringReader(node.InnerXml);
-                        return (T) serializer.Deserialize(reader);
+                        using (var reader = new StringReader(node.InnerXml) ) {
+                            return (T) serializer.Deserialize(reader);
+                        }
                     }
                 }
                 return fallback;
@@ -125,11 +126,11 @@ namespace Banshee.Configuration
         {
             lock(xml_document) {
                 XmlSerializer serializer = new XmlSerializer(typeof(T));
-                StringWriter writer = new StringWriter();
-                serializer.Serialize(writer, value);
-                XmlDocumentFragment fragment = xml_document.CreateDocumentFragment();
-                fragment.InnerXml = writer.ToString();
-                writer.Close();
+                var fragment = xml_document.CreateDocumentFragment();
+                using (var writer = new StringWriter()) {
+                    serializer.Serialize(writer, value);
+                    fragment.InnerXml = writer.ToString();
+                }
 
                 if(fragment.FirstChild is XmlDeclaration) {
                     fragment.RemoveChild(fragment.FirstChild); // This is only a problem with Microsoft's System.Xml
diff --git a/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs b/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs
index 25f2f58..66f2416 100644
--- a/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs
@@ -160,43 +160,46 @@ namespace Banshee.Collection
             try {
                 SafeUri uri = new SafeUri (file_path);
 
-                IDataReader reader = ServiceManager.DbConnection.Query (fetch_command, psource.DbId, uri.AbsoluteUri);
-                if (reader.Read () ) {
-                    //Hyena.Log.DebugFormat ("Found it in the db!");
-                    DatabaseTrackInfo track = DatabaseTrackInfo.Provider.Load (reader);
-
-                    MergeIfModified (track);
-
-                    // Either way, update the LastSyncStamp
-                    track.LastSyncedStamp = DateTime.Now;
-                    track.Save (false);
-                    status = String.Format ("{0} - {1}", track.DisplayArtistName, track.DisplayTrackTitle);
-                } else {
-                    // This URI is not in the database - try to find it based on MetadataHash in case it was simply moved
-                    DatabaseTrackInfo track = new DatabaseTrackInfo ();
-                    Banshee.Streaming.StreamTagger.TrackInfoMerge (track, uri);
-
-                    IDataReader similar_reader = ServiceManager.DbConnection.Query (fetch_similar_command, psource.DbId, scan_started, track.MetadataHash);
-                    DatabaseTrackInfo similar_track = null;
-                    while (similar_reader.Read ()) {
-                        similar_track = DatabaseTrackInfo.Provider.Load (similar_reader);
-                        if (!Banshee.IO.File.Exists (similar_track.Uri)) {
-                            //Hyena.Log.DebugFormat ("Apparently {0} was moved to {1}", similar_track.Uri, file_path);
-                            similar_track.Uri = uri;
-                            MergeIfModified (similar_track);
-                            similar_track.LastSyncedStamp = DateTime.Now;
-                            similar_track.Save (false);
-                            status = String.Format ("{0} - {1}", similar_track.DisplayArtistName, similar_track.DisplayTrackTitle);
-                            break;
+                using (var reader = ServiceManager.DbConnection.Query (fetch_command, psource.DbId, uri.AbsoluteUri)) {
+                    if (reader.Read () ) {
+                        //Hyena.Log.DebugFormat ("Found it in the db!");
+                        DatabaseTrackInfo track = DatabaseTrackInfo.Provider.Load (reader);
+
+                        MergeIfModified (track);
+
+                        // Either way, update the LastSyncStamp
+                        track.LastSyncedStamp = DateTime.Now;
+                        track.Save (false);
+                        status = String.Format ("{0} - {1}", track.DisplayArtistName, track.DisplayTrackTitle);
+                    } else {
+                        // This URI is not in the database - try to find it based on MetadataHash in case it was simply moved
+                        DatabaseTrackInfo track = new DatabaseTrackInfo ();
+                        Banshee.Streaming.StreamTagger.TrackInfoMerge (track, uri);
+
+                        using (var similar_reader = ServiceManager.DbConnection.Query (
+                            fetch_similar_command, psource.DbId, scan_started, track.MetadataHash)) {
+                            DatabaseTrackInfo similar_track = null;
+                            while (similar_reader.Read ()) {
+                                similar_track = DatabaseTrackInfo.Provider.Load (similar_reader);
+                                if (!Banshee.IO.File.Exists (similar_track.Uri)) {
+                                    //Hyena.Log.DebugFormat ("Apparently {0} was moved to {1}", similar_track.Uri, file_path);
+                                    similar_track.Uri = uri;
+                                    MergeIfModified (similar_track);
+                                    similar_track.LastSyncedStamp = DateTime.Now;
+                                    similar_track.Save (false);
+                                    status = String.Format ("{0} - {1}", similar_track.DisplayArtistName, similar_track.DisplayTrackTitle);
+                                    break;
+                                }
+                                similar_track = null;
+                            }
+
+                            // If we still couldn't find it, try to import it
+                            if (similar_track == null) {
+                                //Hyena.Log.DebugFormat ("Couldn't find it, so queueing to import it");
+                                status = System.IO.Path.GetFileNameWithoutExtension (file_path);
+                                ServiceManager.Get<Banshee.Library.LibraryImportManager> ().ImportTrack (file_path);
+                            }
                         }
-                        similar_track = null;
-                    }
-
-                    // If we still couldn't find it, try to import it
-                    if (similar_track == null) {
-                        //Hyena.Log.DebugFormat ("Couldn't find it, so queueing to import it");
-                        status = System.IO.Path.GetFileNameWithoutExtension (file_path);
-                        ServiceManager.Get<Banshee.Library.LibraryImportManager> ().ImportTrack (file_path);
                     }
                 }
             } catch (Exception e) {
diff --git a/src/Core/Banshee.Services/Banshee.Metadata/MetadataServiceJob.cs b/src/Core/Banshee.Services/Banshee.Metadata/MetadataServiceJob.cs
index 5e658fd..76ddc08 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata/MetadataServiceJob.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata/MetadataServiceJob.cs
@@ -163,10 +163,10 @@ namespace Banshee.Metadata
         {
             HttpWebResponse response = GetHttpStream(uri, ignoreMimeTypes);
             Stream from_stream = response == null ? null : response.GetResponseStream ();
+            if (response != null) {
+                response.Close ();
+            }
             if(from_stream == null) {
-                if (response != null) {
-                    response.Close ();
-                }
                 return false;
             }
 
diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/AsxPlaylistFormat.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/AsxPlaylistFormat.cs
index de0d008..073f782 100644
--- a/src/Core/Banshee.Services/Banshee.Playlists.Formats/AsxPlaylistFormat.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/AsxPlaylistFormat.cs
@@ -49,9 +49,10 @@ namespace Banshee.Playlists.Formats
         public static bool MagicHandler(StreamReader reader)
         {
             try {
-                XmlTextReader xml_reader = new XmlTextReader(reader);
-                xml_reader.WhitespaceHandling = WhitespaceHandling.None;
-                return CheckAsxHeader(xml_reader);
+                using (var xml_reader = new XmlTextReader(reader)) {
+                    xml_reader.WhitespaceHandling = WhitespaceHandling.None;
+                    return CheckAsxHeader(xml_reader);
+                }
             } catch {
                 return false;
             }
@@ -124,6 +125,7 @@ namespace Banshee.Playlists.Formats
                     }
                 } while(!xml_reader.EOF && xml_reader.Depth > 1);
             }
+            xml_reader.Close ();
         }
 
         public override void Save(Stream stream, ITrackModelSource source)
diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistParser.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistParser.cs
index 6233294..4e81090 100644
--- a/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistParser.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistParser.cs
@@ -128,10 +128,11 @@ namespace Banshee.Playlists.Formats
                 foreach (PlaylistFormatDescription format in playlist_formats) {
                     stream.Position = 0;
 
-                    StreamReader reader = new StreamReader (stream);
-                    if (format.MagicHandler (reader)) {
-                        matching_format = format;
-                        break;
+                    using (var reader = new StreamReader (stream)) {
+                        if (format.MagicHandler (reader)) {
+                            matching_format = format;
+                            break;
+                        }
                     }
                 }
 
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellAlbum.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellAlbum.cs
index 716fad0..bcf806a 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellAlbum.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/ColumnCellAlbum.cs
@@ -101,6 +101,10 @@ namespace Banshee.Collection.Gui
             ArtworkRenderer.RenderThumbnail (context.Context, image, false, x, y,
                 image_render_size, image_render_size, !is_default, context.Theme.Context.Radius);
 
+            if (!is_default) {
+                ((IDisposable)image).Dispose ();
+            }
+
             int fl_width = 0, fl_height = 0, sl_width = 0, sl_height = 0;
             Cairo.Color text_color = context.Theme.Colors.GetWidgetColor (GtkColorClass.Text, state);
             text_color.A = 0.75;
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/XmlColumnController.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/XmlColumnController.cs
index a3998c7..bed0712 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/XmlColumnController.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/XmlColumnController.cs
@@ -41,11 +41,11 @@ namespace Banshee.Collection.Gui
     {
         public XmlColumnController (string xml) : base (false)
         {
-            XmlTextReader reader = new XmlTextReader (new StringReader (xml));
-
-            while (reader.Read ()) {
-                if (reader.NodeType == XmlNodeType.Element && reader.Name == "column-controller") {
-                    ReadColumnController (reader, reader.Depth);
+            using (var reader = new XmlTextReader (new StringReader (xml))) {
+                while (reader.Read ()) {
+                    if (reader.NodeType == XmlNodeType.Element && reader.Name == "column-controller") {
+                        ReadColumnController (reader, reader.Depth);
+                    }
                 }
             }
 
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ImageFileChooserDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ImageFileChooserDialog.cs
index 2134476..3cc9cb7 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ImageFileChooserDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Dialogs/ImageFileChooserDialog.cs
@@ -70,8 +70,9 @@ namespace Banshee.Gui.Dialogs
                     throw new ApplicationException ();
                 }
 
-                Gdk.Pixbuf pixbuf = new Gdk.Pixbuf (PreviewFilename);
-                preview.Pixbuf = pixbuf.ScaleSimple (100, 100, Gdk.InterpType.Bilinear);
+                using (var pixbuf = new Gdk.Pixbuf (PreviewFilename)) {
+                    preview.Pixbuf = pixbuf.ScaleSimple (100, 100, Gdk.InterpType.Bilinear);
+                }
                 preview.Show ();
             } catch {
                 preview.Hide ();
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs
index 11d02c8..2c048be 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs
@@ -153,6 +153,7 @@ namespace Banshee.Sources.Gui
 
             Pixbuf icon = SourceIconResolver.ResolveIcon (source, RowHeight);
 
+            bool dispose_icon = false;
             if (state == StateType.Insensitive) {
                 // Code ported from gtk_cell_renderer_pixbuf_render()
                 var icon_source = new IconSource () {
@@ -163,6 +164,9 @@ namespace Banshee.Sources.Gui
 
                 icon = widget.Style.RenderIcon (icon_source, widget.Direction, state,
                     (IconSize)(-1), widget, "SourceRowRenderer");
+
+                dispose_icon = true;
+                icon_source.Dispose ();
             }
 
             FontDescription fd = widget.PangoContext.FontDescription.Copy ();
@@ -210,6 +214,10 @@ namespace Banshee.Sources.Gui
                 drawable.DrawPixbuf (main_gc, icon, 0, 0,
                     cell_area.X, Middle (cell_area, icon.Height),
                     icon.Width, icon.Height, RgbDither.None, 0, 0);
+
+                if (dispose_icon) {
+                    icon.Dispose ();
+                }
             }
 
             if (hide_counts) {
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/LibrarySyncOptions.cs b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/LibrarySyncOptions.cs
index f910cbe..7cec480 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap.Gui/LibrarySyncOptions.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap.Gui/LibrarySyncOptions.cs
@@ -106,6 +106,8 @@ namespace Banshee.Dap.Gui
             foreach (var child in library_sync.Library.Children) {
                 RemovePlaylist (child, true);
             }
+
+            combo.Dispose ();
         }
 
         private void AddPlaylist (Source source)
diff --git a/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtService.cs b/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtService.cs
index dd3395e..6597a9d 100644
--- a/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtService.cs
+++ b/src/Extensions/Banshee.CoverArt/Banshee.CoverArt/CoverArtService.cs
@@ -135,6 +135,7 @@ namespace Banshee.CoverArt
                 action_service.RemoveActionGroup ("CoverArt");
                 action_service.UIManager.RemoveUi (ui_manager_id);
 
+                actions.Dispose ();
                 actions = null;
                 action_service = null;
 
diff --git a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellPodcast.cs b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellPodcast.cs
index 86884e6..c982331 100644
--- a/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellPodcast.cs
+++ b/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.Gui/ColumnCellPodcast.cs
@@ -89,6 +89,10 @@ namespace Banshee.Podcasting.Gui
             ArtworkRenderer.RenderThumbnail (context.Context, image, false, x, y,
                 image_render_size, image_render_size, !is_default, context.Theme.Context.Radius);
 
+            if (!is_default) {
+                ((IDisposable)image).Dispose ();
+            }
+
             int fl_width = 0, fl_height = 0, sl_width = 0, sl_height = 0;
             Cairo.Color text_color = context.Theme.Colors.GetWidgetColor (GtkColorClass.Text, state);
             text_color.A = 0.75;
diff --git a/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteConnection.cs b/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteConnection.cs
index 037c192..e7fad63 100644
--- a/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteConnection.cs
+++ b/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteConnection.cs
@@ -465,6 +465,10 @@ namespace Hyena.Data.Sqlite
             dispose_requested = true;
             queue_signal.Set ();
             queue_thread.Join ();
+
+            queue_signal.Close ();
+            ResultReadySignal.Close ();
+            transaction_signal.Close ();
         }
     }
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]