From 20ac57783b6e3577cb60390180d964d937ef2615 Mon Sep 17 00:00:00 2001 From: Tim Kourt Date: Fri, 22 Mar 2019 10:30:30 -0700 Subject: [PATCH] auto-t: AdHoc - address race condition The AdHoc methods used to miss the change in properties on AdHoc interface. To address the race condition, we subscribe 'PropertiesChanged' signal first and then do GetAll properties call. This way we are not missing 'PropertiesChanged' signal in between these calls. --- autotests/util/iwd.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/autotests/util/iwd.py b/autotests/util/iwd.py index 8a9954f0..7a3d6c9a 100755 --- a/autotests/util/iwd.py +++ b/autotests/util/iwd.py @@ -468,11 +468,6 @@ class Device(IWDDBusAbstract): self._prop_proxy.Set(IWD_DEVICE_INTERFACE, 'Mode', 'station') def adhoc_wait_for_disconnected(self, addr): - props = self._prop_proxy.GetAll(IWD_ADHOC_INTERFACE) - if props.get('ConnectedPeers', None): - if addr not in props['ConnectedPeers']: - return - self._adhoc_prop_found = False self._adhoc_timed_out = False @@ -487,6 +482,10 @@ class Device(IWDDBusAbstract): self._prop_proxy.connect_to_signal('PropertiesChanged', adhoc_props_changed) + props = self._prop_proxy.GetAll(IWD_ADHOC_INTERFACE) + if props.get('ConnectedPeers', None): + if addr not in props['ConnectedPeers']: + return GLib.timeout_add(int(30 * 1000), wait_timeout_cb) context = mainloop.get_context() @@ -496,11 +495,6 @@ class Device(IWDDBusAbstract): raise TimeoutError("Timed out waiting for peer %s" % addr) def adhoc_wait_for_connected(self, addr): - props = self._prop_proxy.GetAll(IWD_ADHOC_INTERFACE) - if props.get('ConnectedPeers', None): - if addr in props['ConnectedPeers']: - return - self._adhoc_prop_found = False self._adhoc_timed_out = False @@ -516,6 +510,11 @@ class Device(IWDDBusAbstract): self._prop_proxy.connect_to_signal('PropertiesChanged', adhoc_props_changed) + props = self._prop_proxy.GetAll(IWD_ADHOC_INTERFACE) + if props.get('ConnectedPeers', None): + if addr in props['ConnectedPeers']: + return + GLib.timeout_add(int(15 * 1000), wait_timeout_cb) context = mainloop.get_context() while not self._adhoc_prop_found: