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.orgReview 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>