[PATCH master] Network spoke: Use connection state that triggered a callback (bug #871429)
Radek Vykydal
rvykydal at redhat.com
Wed Nov 7 12:41:57 UTC 2012
Additional fix.
If the info refresh is caused by device state change, use the state
that triggered the callback (do not read the state in the callback)
to prevent race with SECONDARIES state.
---
pyanaconda/ui/gui/spokes/network.py | 39 ++++++++++++++++++++--------------
1 files changed, 23 insertions(+), 16 deletions(-)
diff --git a/pyanaconda/ui/gui/spokes/network.py b/pyanaconda/ui/gui/spokes/network.py
index 2ae4184..f8ebcf5 100644
--- a/pyanaconda/ui/gui/spokes/network.py
+++ b/pyanaconda/ui/gui/spokes/network.py
@@ -376,7 +376,7 @@ class NetworkControlBox():
self._refresh_carrier_info()
read_config_values = (new_state == NetworkManager.DeviceState.ACTIVATED)
if device == self.selected_device():
- self.refresh_ui(device, read_config_values)
+ self.refresh_ui(device, read_config_values, new_state)
# TODO: remove/fix
def on_active_connections_changed(self, *args):
@@ -598,7 +598,7 @@ class NetworkControlBox():
for row in rows_to_remove:
del(row)
- def refresh_ui(self, device, read_config_values=True):
+ def refresh_ui(self, device, read_config_values=True, state=None):
if not device:
notebook = self.builder.get_object("notebook_types")
@@ -606,16 +606,16 @@ class NetworkControlBox():
return
self._refresh_device_type_page(device)
- self._refresh_header_ui(device)
- self._refresh_speed_hwaddr(device)
- self._refresh_ap(device)
+ self._refresh_header_ui(device, state)
+ self._refresh_speed_hwaddr(device, state)
+ self._refresh_ap(device, state)
if read_config_values:
num_of_tries = 3
else:
num_of_tries = 0
- self._refresh_device_cfg((device, num_of_tries))
+ self._refresh_device_cfg((device, num_of_tries), state)
- def _refresh_device_cfg(self, dev_tries):
+ def _refresh_device_cfg(self, dev_tries, state):
device, num_of_tries = dev_tries
ipv4cfg = None
ipv6cfg = None
@@ -635,8 +635,10 @@ class NetworkControlBox():
elif dev_type == NetworkManager.DeviceType.WIFI:
dt = "wireless"
+ if state is None:
+ state = device.get_state()
if (ipv4cfg
- and device.get_state() == NetworkManager.DeviceState.ACTIVATED):
+ and state == NetworkManager.DeviceState.ACTIVATED):
addr = socket.inet_ntoa(struct.pack('=L',
ipv4cfg.get_addresses()[0].get_address()))
self._set_device_info_value(dt, "ipv4", addr)
@@ -663,7 +665,7 @@ class NetworkControlBox():
# TODO NM_GI_BUGS - segfaults on get_addres(), get_prefix()
ipv6_addr = None
if (ipv6cfg
- and device.get_state() == NetworkManager.DeviceState.ACTIVATED):
+ and state == NetworkManager.DeviceState.ACTIVATED):
config = dbus.SystemBus().get_object(NM_SERVICE, ipv6cfg.get_path())
addr, prefix, gw = getNMObjProperty(config, ".IP6Config",
"Addresses")[0]
@@ -680,11 +682,13 @@ class NetworkControlBox():
return False
- def _refresh_ap(self, device):
+ def _refresh_ap(self, device, state=None):
if device.get_device_type() != NetworkManager.DeviceType.WIFI:
return
- if device.get_state() == NetworkManager.DeviceState.UNAVAILABLE:
+ if state is None:
+ state = device.get_state()
+ if state == NetworkManager.DeviceState.UNAVAILABLE:
ap_str = None
else:
active_ap = device.get_active_access_point()
@@ -701,7 +705,7 @@ class NetworkControlBox():
self._set_device_info_value("wireless", "security", ap_str)
- if device.get_state() == NetworkManager.DeviceState.UNAVAILABLE:
+ if state == NetworkManager.DeviceState.UNAVAILABLE:
self.builder.get_object("heading_wireless_network_name").hide()
self.builder.get_object("combobox_wireless_network_name").hide()
else:
@@ -725,7 +729,7 @@ class NetworkControlBox():
break
self._updating_device = False
- def _refresh_speed_hwaddr(self, device):
+ def _refresh_speed_hwaddr(self, device, state=None):
dev_type = device.get_device_type()
if dev_type == NetworkManager.DeviceType.ETHERNET:
dt = "wired"
@@ -734,7 +738,9 @@ class NetworkControlBox():
dt = "wireless"
speed = device.get_bitrate() / 1000
- if device.get_state() == NetworkManager.DeviceState.UNAVAILABLE:
+ if state is None:
+ state = device.get_state()
+ if state == NetworkManager.DeviceState.UNAVAILABLE:
speed_str = None
elif speed:
speed_str = _("%d Mb/s") % speed
@@ -755,7 +761,7 @@ class NetworkControlBox():
for i in self.builder.get_object("liststore_devices"):
i[DEVICES_COLUMN_TITLE] = self._dev_title(i[DEVICES_COLUMN_OBJECT])
- def _refresh_header_ui(self, device):
+ def _refresh_header_ui(self, device, state=None):
dev_type = device.get_device_type()
if dev_type == NetworkManager.DeviceType.ETHERNET:
dev_type_str = "wired"
@@ -771,7 +777,8 @@ class NetworkControlBox():
self.builder.get_object("label_%s_device" % dev_type_str).set_label(
"%s (%s)" % (self._dev_type_str(device), device.get_iface()))
- state = device.get_state()
+ if state is None:
+ state = device.get_state()
self.builder.get_object("label_%s_status" % dev_type_str).set_label(
localized_string_of_device_state(device))
--
1.7.4
More information about the anaconda-patches
mailing list