Hello community, here is the log from the commit of package zmd checked in at Mon Apr 24 16:19:47 CEST 2006. -------- --- zmd/zmd.changes 2006-04-21 11:26:09.000000000 +0200 +++ STABLE/zmd/zmd.changes 2006-04-24 15:24:18.000000000 +0200 @@ -1,0 +2,7 @@ +Mon Apr 24 14:47:49 CEST 2006 - thoenig@suse.de + +- Add patch zmd-networkmanager-reconnect.diff to make ZMD resistant + against D-BUS restarts (#167824). +- Add Requires for dbus-1-mono-0.60-27 or higher. + +------------------------------------------------------------------- New: ---- zmd-networkmanager-reconnect.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ zmd.spec ++++++ --- /var/tmp/diff_new_pack.p0Lt6a/_old 2006-04-24 16:19:22.000000000 +0200 +++ /var/tmp/diff_new_pack.p0Lt6a/_new 2006-04-24 16:19:22.000000000 +0200 @@ -14,18 +14,20 @@ BuildRequires: dbus-1-mono log4net mono-basic mono-data-sqlite mono-devel perl-XML-Parser rpm-devel sqlite-devel URL: http://www.novell.com Version: 7.1.1.0 -Release: 15 +Release: 18 License: LGPL BuildRoot: %{_tmppath}/%{name}-%{version}-build Source0: %{name}-%{version}.tar.bz2 Patch0: %{name}-makefile-docdir.patch Patch1: verified-certs.patch Patch2: bug156995.patch +Patch3: zmd-networkmanager-reconnect.diff Summary: Novell ZENworks Linux Management daemon Group: System/Daemons Autoreqprov: on Prereq: %insserv_prereq Requires: zmd-backend +Requires: dbus-1-mono >= %( echo `rpm -q --queryformat '%{VERSION}-%{RELEASE}' dbus-1-mono`) Obsoletes: rcd %description @@ -65,6 +67,7 @@ %patch0 %patch1 %patch2 -p1 +%patch3 %build libtoolize -f @@ -152,6 +155,10 @@ # %{_libdir}/monodoc/sources/* %changelog -n zmd +* Mon Apr 24 2006 - thoenig@suse.de +- Add patch zmd-networkmanager-reconnect.diff to make ZMD resistant + against D-BUS restarts (#167824). +- Add Requires for dbus-1-mono-0.60-27 or higher. * Fri Apr 21 2006 - aj@suse.de - Fix 156995 - patch by Tambet Ingo. * Thu Apr 20 2006 - maw@suse.de ++++++ zmd-networkmanager-reconnect.diff ++++++ --- modules/linux/NetworkManager/Manager.cs 24 Feb 2006 10:00:31 -0000 +++ modules/linux/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...