Hello community, here is the log from the commit of package banshee checked in at Mon Apr 24 15:55:10 CEST 2006. -------- --- GNOME/banshee/banshee.changes 2006-04-12 19:47:41.000000000 +0200 +++ STABLE/banshee/banshee.changes 2006-04-24 15:24:36.000000000 +0200 @@ -1,0 +2,7 @@ +Mon Apr 24 14:47:49 CEST 2006 - thoenig@suse.de + +- Add patch banshee-networkmanager-reconnect.diff to make Banshee + resistant against D-BUS restarts (#167824). +- Add Requires for dbus-1-mono-0.60-27 or higher. + +------------------------------------------------------------------- New: ---- banshee-networkmanager-reconnect.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ banshee.spec ++++++ --- /var/tmp/diff_new_pack.kOcdD1/_old 2006-04-24 15:54:04.000000000 +0200 +++ /var/tmp/diff_new_pack.kOcdD1/_new 2006-04-24 15:54:04.000000000 +0200 @@ -22,7 +22,7 @@ PreReq: filesystem gconf2 Requires: mono-core Version: 0.10.9 -Release: 8 +Release: 12 Source0: banshee-%{version}.tar.gz Source1: gstreamer-xing-0.10.0.tar.gz Patch0: %{name}-libaoss-preload.patch @@ -31,12 +31,14 @@ Patch3: %{name}-transparent-trayicon.patch Patch5: %{name}-fix-icons.patch Patch6: %{name}-sled-cuml-07.diff +Patch7: %{name}-networkmanager-reconnect.diff URL: http://banshee-project.org BuildRoot: %{_tmppath}/%{name}-%{version}-build Summary: A Music Player Based on Mono and GStreamer Requires: libipoddevice libmusicbrainz libnjb Requires: gstreamer010 gstreamer010-plugins-base gstreamer010-plugins-good Requires: banshee-engine = %{version} +Requires: dbus-1-mono >= %( echo `rpm -q --queryformat '%{VERSION}-%{RELEASE}' dbus-1-mono`) Obsoletes: sonance %description @@ -143,6 +145,7 @@ %patch3 %patch5 %patch6 +%patch7 %build autoreconf -f -i @@ -270,6 +273,10 @@ %{prefix}/%{_lib}/banshee/Banshee.Plugins/Daap.dll* %changelog -n banshee +* Mon Apr 24 2006 - thoenig@suse.de +- Add patch banshee-networkmanager-reconnect.diff to make Banshee + resistant against D-BUS restarts (#167824). +- Add Requires for dbus-1-mono-0.60-27 or higher. * Wed Apr 12 2006 - gekker@suse.de - Fix to build xing encoder on all archs (#165454) * Mon Apr 10 2006 - jpr@suse.de ++++++ banshee-networkmanager-reconnect.diff ++++++ --- src/Banshee.Base/NetworkManager/Manager.cs 24 Feb 2006 10:00:31 -0000 +++ src/Banshee.Base/NetworkManager/Manager.cs 24 Apr 2006 10:00:31 -0000 @@ -30,6 +30,7 @@ using System; using System.Reflection; using System.Collections; +using System.Threading; using DBus; namespace NetworkManager @@ -68,6 +69,8 @@ { private static readonly string PATH_NAME = "/org/freedesktop/NetworkManager"; private static readonly string INTERFACE_NAME = "org.freedesktop.NetworkManager"; + private static readonly string DBUS_LOCAL_PATH_NAME = "/org/freedesktop/DBus/Local"; + private static readonly string DBUS_LOCAL_INTERFACE_NAME = "org.freedesktop.DBus.Local"; private Service dbus_service; private Connection dbus_connection; @@ -88,11 +91,7 @@ public Manager() { - dbus_connection = Bus.GetSystemBus(); - dbus_service = Service.Get(dbus_connection, INTERFACE_NAME); - manager = (ManagerProxy)dbus_service.GetObject(typeof(ManagerProxy), PATH_NAME); - - dbus_service.SignalCalled += OnSignalCalled; + Connect(); } public void Dispose() @@ -101,8 +100,47 @@ System.GC.SuppressFinalize(manager); } + private void Connect() + { + dbus_connection = Bus.GetSystemBus(); + dbus_connection.ExitOnDisconnect = false; + dbus_service = Service.Get(dbus_connection, INTERFACE_NAME); + manager = (ManagerProxy)dbus_service.GetObject(typeof(ManagerProxy), PATH_NAME); + + dbus_service.SignalCalled += OnSignalCalled; + } + + private void Reconnect() + { + while(true) { + Thread.Sleep(3000); + + try { + Connect(); + return; + } catch(DBusException) { + } catch(ApplicationException) { + } + } + } + private void OnSignalCalled(Signal signal) { + if(signal.PathName == DBUS_LOCAL_PATH_NAME + && signal.InterfaceName == DBUS_LOCAL_INTERFACE_NAME) { + switch(signal.Name) { + case "Disconnected": + dbus_connection.Dispose(); + dbus_service.SignalCalled -= OnSignalCalled; + Dispose(); + + Thread reconnect_thread = new Thread(Reconnect); + reconnect_thread.IsBackground = true; + reconnect_thread.Start(); + break; + } + } + if(signal.PathName != PATH_NAME || signal.InterfaceName != INTERFACE_NAME) { return; } ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun...