From 416f6a5c0823abc2329cb929d789192245edfb5e Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Mon, 14 Mar 2011 19:10:13 +0000 Subject: [PATCH] Disconnect from dbus signals Otherwise, it is easy to reach to connects limit, ie, get org.freedesktop.DBus.Error.LimitsExceeded dbus fails. --- tests/testpackagekit.py | 5 +++++ zeroinstall/injector/packagekit.py | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/testpackagekit.py b/tests/testpackagekit.py index 47efdab..84d4f0c 100755 --- a/tests/testpackagekit.py +++ b/tests/testpackagekit.py @@ -9,6 +9,10 @@ from zeroinstall.support import tasks import dbus +class Connection: + def remove(self): + pass + class PackageKit05: x = 0 @@ -22,6 +26,7 @@ class PackageKit05: def connect_to_signal(self, signal, cb): self.signals[signal] = cb + return Connection() def get_dbus_method(self, method): if hasattr(self, method): diff --git a/zeroinstall/injector/packagekit.py b/zeroinstall/injector/packagekit.py index 325f388..49b03cf 100644 --- a/zeroinstall/injector/packagekit.py +++ b/zeroinstall/injector/packagekit.py @@ -237,13 +237,14 @@ class _PackageKitTransaction(object): 'org.freedesktop.PackageKit.Transaction') self._props = dbus.Interface(self.object, dbus.PROPERTIES_IFACE) + self._signals = [] for signal, cb in [('Finished', self.__finished_cb), ('ErrorCode', self.__error_code_cb), ('StatusChanged', self.__status_changed_cb), ('Package', self.__package_cb), ('Details', self.__details_cb), ('Files', self.__files_cb)]: - self.proxy.connect_to_signal(signal, cb) + self._signals.append(self.proxy.connect_to_signal(signal, cb)) defaultlocale = locale.getdefaultlocale()[0] if defaultlocale is not None: @@ -279,6 +280,10 @@ class _PackageKitTransaction(object): def __finished_cb(self, exit, runtime): _logger_pk.debug(_('Transaction finished: %s'), exit) + + for i in self._signals: + i.remove() + if self.error_code is not None: self._error_cb(self) else: -- 2.11.4.GIT