[Pkg-cli-apps-commits] [SCM] banshee branch, master-devel, updated. debian/1.5.0-1-14-gc3d95e2

Chow Loong Jin hyperair at gmail.com
Thu Jul 9 03:38:13 UTC 2009


The following commit has been merged in the master-devel branch:
commit 43bd2cb1b2eecfb1c639600004f668af614b221a
Author: Chow Loong Jin <hyperair at gmail.com>
Date:   Wed Jul 8 22:10:58 2009 +0800

    Fix for BGO #586498
    
    * debian/patches/01_dispose-sqlite-cmd.patch:
      + Fix for BGO #586498, where Banshee leaks memory while rescanning library
    * debian/patches/01_remove-bash-dep.patch:
      + Delete it for good

diff --git a/debian/changelog b/debian/changelog
index 5113b2f..f70d39b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -9,8 +9,12 @@ banshee (1.5.0-2) UNRELEASED; urgency=low
       any more.
   * debian/banshee.links:
     + Updated to symlink the banshee manpage to banshee-1
+  * debian/patches/01_dispose-sqlite-cmd.patch:
+    + Fix for BGO #586498, where Banshee leaks memory while rescanning library
+  * debian/patches/01_remove-bash-dep.patch:
+    + Delete it for good
 
- -- Chow Loong Jin <hyperair at ubuntu.com>  Sat, 13 Jun 2009 12:25:11 +0800
+ -- Chow Loong Jin <hyperair at ubuntu.com>  Wed, 08 Jul 2009 22:10:27 +0800
 
 banshee (1.5.0-1) experimental; urgency=low
 
diff --git a/debian/patches/01_dispose-sqlite-cmd.patch b/debian/patches/01_dispose-sqlite-cmd.patch
new file mode 100644
index 0000000..c9f97f3
--- /dev/null
+++ b/debian/patches/01_dispose-sqlite-cmd.patch
@@ -0,0 +1,125 @@
+From 7d152271398d0b3166460f7fd1207b25c3b387a6 Mon Sep 17 00:00:00 2001
+From: Alexander Kojevnikov <alexander at kojevnikov.com>
+Date: Mon, 22 Jun 2009 10:57:25 +1000
+Subject: [PATCH] Dispose the SqliteCommand after it's executed (bgo#586498)
+
+Not disposing the command causes huge increases in memory usage when
+re-scanning the library.
+---
+ .../Hyena/Hyena.Data.Sqlite/HyenaSqliteCommand.cs  |   67 ++++++++++----------
+ .../Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs  |   17 +++++
+ 2 files changed, 51 insertions(+), 33 deletions(-)
+
+diff --git a/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteCommand.cs b/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteCommand.cs
+index fb08d65..53fc49e 100644
+--- a/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteCommand.cs
++++ b/src/Libraries/Hyena/Hyena.Data.Sqlite/HyenaSqliteCommand.cs
+@@ -109,43 +109,44 @@ namespace Hyena.Data.Sqlite
+             execution_exception = null;
+             result = null;
+ 
+-            SqliteCommand sql_command = new SqliteCommand (CurrentSqlText);
+-            sql_command.Connection = connection;
+-
+-            hconnection.OnExecuting (sql_command);
+-
+-            try {
+-                if (log_all)
+-                    ticks = System.Environment.TickCount;
++            using (SqliteCommand sql_command = new SqliteCommand (CurrentSqlText)) {
++                sql_command.Connection = connection;
++
++                hconnection.OnExecuting (sql_command);
++
++                try {
++                    if (log_all)
++                        ticks = System.Environment.TickCount;
++
++                    switch (command_type) {
++                        case HyenaCommandType.Reader:
++                            using (SqliteDataReader reader = sql_command.ExecuteReader ()) {
++                                result = new HyenaSqliteArrayDataReader (reader);
++                            }
++                            break;
++
++                        case HyenaCommandType.Scalar:
++                            result = sql_command.ExecuteScalar ();
++                            break;
++
++                        case HyenaCommandType.Execute:
++                        default:
++                            sql_command.ExecuteNonQuery ();
++                            result = sql_command.LastInsertRowID ();
++                            break;
++                    }
+ 
+-                switch (command_type) {
+-                    case HyenaCommandType.Reader:
+-                        using (SqliteDataReader reader = sql_command.ExecuteReader ()) {
+-                            result = new HyenaSqliteArrayDataReader (reader);
++                    if (log_all) {
++                        Log.DebugFormat ("Executed in {0}ms {1}", System.Environment.TickCount - ticks, sql_command.CommandText);
++                        CommandExecutedHandler handler = CommandExecuted;
++                        if (handler != null) {
++                            handler (this, new CommandExecutedArgs (Text, sql_command.CommandText, null, System.Environment.TickCount - ticks));
+                         }
+-                        break;
+-
+-                    case HyenaCommandType.Scalar:
+-                        result = sql_command.ExecuteScalar ();
+-                        break;
+-
+-                    case HyenaCommandType.Execute:
+-                    default:
+-                        sql_command.ExecuteNonQuery ();
+-                        result = sql_command.LastInsertRowID ();
+-                        break;
+-                }
+-
+-                if (log_all) {
+-                    Log.DebugFormat ("Executed in {0}ms {1}", System.Environment.TickCount - ticks, sql_command.CommandText);
+-                    CommandExecutedHandler handler = CommandExecuted;
+-                    if (handler != null) {
+-                        handler (this, new CommandExecutedArgs (Text, sql_command.CommandText, null, System.Environment.TickCount - ticks));
+                     }
++                } catch (Exception e) {
++                    Log.DebugFormat (String.Format ("Exception executing command: {0}", sql_command.CommandText), e.ToString ());
++                    execution_exception = e;
+                 }
+-            } catch (Exception e) {
+-                Log.DebugFormat (String.Format ("Exception executing command: {0}", sql_command.CommandText), e.ToString ()); 
+-                execution_exception = e;
+             }
+ 
+             finished_event.Reset ();
+diff --git a/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs b/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs
+index 17a24a4..f847f1b 100644
+--- a/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs
++++ b/src/Libraries/Hyena/Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs
+@@ -94,6 +94,23 @@ namespace Hyena.Data.Sqlite.Tests
+             Assert.AreEqual ("select foo from bar where id in (1,2,4) and foo not in ('foo','baz')",
+                     GetGeneratedSql (cmd3, new int [] {1, 2, 4}, new string [] {"foo", "baz"}));
+         }
++
++        [Test]
++        public void ExecuteMustDisposeSqliteCommand ()
++        {
++            using(var connection = new HyenaSqliteConnection (":memory:")) {
++                bool disposed = false;
++                connection.Executing += delegate (object sender, ExecutingEventArgs args) {
++                    args.Command.Disposed += delegate {
++                        disposed = true;
++                    };
++                };
++
++                connection.Query<int> ("SELECT 42");
++
++                Assert.IsTrue (disposed);
++            }
++        }
+     
+         static PropertyInfo tf = typeof(HyenaSqliteCommand).GetProperty ("CurrentSqlText", BindingFlags.Instance | BindingFlags.NonPublic);
+         private static string GetGeneratedSql (HyenaSqliteCommand cmd, params object [] p)
+-- 
+1.6.3.3
+
diff --git a/debian/patches/01_remove-bash-dep.patch b/debian/patches/01_remove-bash-dep.patch
deleted file mode 100644
index aa44b9d..0000000
--- a/debian/patches/01_remove-bash-dep.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-diff -Nur -x '*.orig' -x '*~' banshee-1.4.2/src/Clients/Booter/banshee-1.in banshee-1.4.2.new/src/Clients/Booter/banshee-1.in
---- banshee-1.4.2/src/Clients/Booter/banshee-1.in	2009-01-21 04:17:04.000000000 +0800
-+++ banshee-1.4.2.new/src/Clients/Booter/banshee-1.in	2009-02-03 23:06:08.000000000 +0800
-@@ -1,4 +1,4 @@
--#!/bin/bash
-+#!/bin/sh
- 
- prefix=@prefix@
- libdir=@expanded_libdir@
-@@ -20,16 +20,16 @@
-         BANSHEE_DEBUG=$arg
-     esac
- 
--    case "x--trace=" in ("x${arg:0:8}")
-+    case "x--trace=" in ("x$(echo $arg | sed -re 's/^(.{8}).*$/\1/')")
-         BANSHEE_TRACE=$arg
-     esac
- 
--    case "x--profile=" in ("x${arg:0:10}")
-+    case "x--profile=" in ("x$(echo $arg | sed -re 's/^(.{10}).*$/\1/')")
-         BANSHEE_PROFILE=$arg
-     esac
- 
- 	case "x--redirect-log" in ("x$arg")
--		[ -z "$(pidof $BANSHEE_EXEC_NAME)" ] && BANSHEE_REDIRECT_LOG="${BANSHEE_CONFIG_DIR}/log"
-+		[ -z "$(ps -C banshee-1 -o pid=)" ] && BANSHEE_REDIRECT_LOG="${BANSHEE_CONFIG_DIR}/log"
- 	esac
- done
- 
-@@ -39,13 +39,13 @@
- fi
- 
- # Finally - environment is set up, time to run our beloved
--exec_args="-a $BANSHEE_EXEC_NAME mono $MONO_OPTIONS $MONO_EXE $BANSHEE_DEBUG"
-+exec_args="mono $MONO_OPTIONS $MONO_EXE $BANSHEE_DEBUG"
- 
- if [ -z "$BANSHEE_REDIRECT_LOG" ]; then
- 	exec $exec_args "$@"
- else
- 	mkdir -p `dirname "$BANSHEE_REDIRECT_LOG"`
--	(echo "exec $exec_args " "$@"; echo; exec $exec_args "$@") &> $BANSHEE_REDIRECT_LOG
-+	(echo "exec $exec_args " "$@"; echo; exec $exec_args "$@") 2>&1 > $BANSHEE_REDIRECT_LOG
- fi
- 
- 
diff --git a/debian/patches/series b/debian/patches/series
index d14b129..a23f86b 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,3 @@
+01_dispose-sqlite-cmd.patch
 02_system-equalizer.patch
 99_ltmain_as-needed.patch

-- 
banshee



More information about the Pkg-cli-apps-commits mailing list