This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Review at https://gerrit.osmocom.org/2489
dbus: handle missing interfaces by deferring, not by looping
Change-Id: I004c15a26753e3b05aa521f0eae1d9f94832059b
---
M src/osmo_gsm_tester/ofono_client.py
1 file changed, 21 insertions(+), 15 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/89/2489/1
diff --git a/src/osmo_gsm_tester/ofono_client.py b/src/osmo_gsm_tester/ofono_client.py
index fdc2e43..fca56a7 100644
--- a/src/osmo_gsm_tester/ofono_client.py
+++ b/src/osmo_gsm_tester/ofono_client.py
@@ -40,7 +40,11 @@
dbus_iface.connect(self.receive_signal)
def receive_signal(self, *args, **kwargs):
- DeferredHandling.defer_queue.append((self.handler, args, kwargs))
+ DeferredHandling.defer(self.handler, args, kwargs)
+
+ @staticmethod
+ def defer(handler, args, kwargs):
+ DeferredHandling.defer_queue.append((handler, args, kwargs))
@staticmethod
def handle_queue():
@@ -57,6 +61,8 @@
DeferredHandling.defer_queue.'''
DeferredHandling(dbus_iface, handler)
+def defer(handler, *args, **kwargs):
+ DeferredHandling.defer(handler, args, kwargs)
def poll():
global glib_main_ctx
@@ -151,21 +157,21 @@
with log.Origin('modem.enable(%s)' % iface):
self._on_interface_enabled(iface)
- def _on_interface_enabled(self, interface_name):
- self.dbg('Interface enabled:', interface_name)
+ def _on_interface_enabled(self, interface_name, retried=0):
+ if not retried:
+ self.dbg('Interface enabled:', interface_name)
+ try:
+ dbus_iface = self.dbus_obj()[interface_name]
+ except KeyError:
+ if retried < 3:
+ self.dbg('Actual DBus interface not present, deferring:', interface_name)
+ defer(self._on_interface_enabled, interface_name, retried + 1)
+ else:
+ self.dbg('DBus interface not appearing after', retried, 'attempts:', interface_name)
+ return
+
if interface_name == I_SMS:
- retries = 3
- while True:
- try:
- dbus_connect(self.dbus_obj()[I_SMS].IncomingMessage, self._on_incoming_message)
- break
- except KeyError:
- self.dbg('Interface not yet available:', I_SMS)
- retries -= 1
- time.sleep(1)
- if retries <= 0:
- self.err('Interface enabled by signal, but not available:', I_SMS)
- raise
+ dbus_connect(self.dbus_obj()[I_SMS].IncomingMessage, self._on_incoming_message)
def _on_interface_disabled(self, interface_name):
self.dbg('Interface disabled:', interface_name)
--
To view, visit https://gerrit.osmocom.org/2489
To unsubscribe, visit https://gerrit.osmocom.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I004c15a26753e3b05aa521f0eae1d9f94832059b
Gerrit-PatchSet: 1
Gerrit-Project: osmo-gsm-tester
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>