NetworkManager r3557 - in branches/NETWORKMANAGER_0_6_0_RELEASE: . src
- From: dcbw svn gnome org
- To: svn-commits-list gnome org
- Subject: NetworkManager r3557 - in branches/NETWORKMANAGER_0_6_0_RELEASE: . src
- Date: Thu, 10 Apr 2008 22:05:26 +0100 (BST)
Author: dcbw
Date: Thu Apr 10 22:05:26 2008
New Revision: 3557
URL: http://svn.gnome.org/viewvc/NetworkManager?rev=3557&view=rev
Log:
2008-04-10 Dan Williams <dcbw redhat com>
* src/nm-device-802-11-wireless.c
- (real_get_generic_capabilities): give the driver some time to respond;
mainly for ipw3945 and the binary regulatory daemon which stupidly
need a few seconds after resume to actually work. People should
really start using iwlwifi instead.
Modified:
branches/NETWORKMANAGER_0_6_0_RELEASE/ChangeLog
branches/NETWORKMANAGER_0_6_0_RELEASE/src/nm-device-802-11-wireless.c
Modified: branches/NETWORKMANAGER_0_6_0_RELEASE/src/nm-device-802-11-wireless.c
==============================================================================
--- branches/NETWORKMANAGER_0_6_0_RELEASE/src/nm-device-802-11-wireless.c (original)
+++ branches/NETWORKMANAGER_0_6_0_RELEASE/src/nm-device-802-11-wireless.c Thu Apr 10 22:05:26 2008
@@ -31,6 +31,7 @@
#include <sys/wait.h>
#include <signal.h>
#include <unistd.h>
+#include <errno.h>
#include "nm-device.h"
#include "nm-device-802-11-wireless.h"
@@ -295,14 +296,34 @@
guint32 caps = NM_DEVICE_CAP_NONE;
iwrange range;
struct iwreq wrq;
+ int i = 24;
+ const char *iface;
/* Check for Wireless Extensions support >= 16 for wireless devices */
if (!(sk = nm_dev_sock_open (dev, DEV_WIRELESS, __func__, NULL)))
goto out;
- if (iw_get_range_info (nm_dev_sock_get_fd (sk), nm_device_get_iface (dev), &range) < 0)
+ iface = nm_device_get_iface (dev);
+
+ /* Need to give some drivers time to recover after suspend/resume
+ * (ipw3945 specifically; see rhbz #362421, rhbz #312911)
+ */
+ while (i-- > 0) {
+ err = iw_get_range_info (nm_dev_sock_get_fd (sk), iface, &range);
+ if (err == 0)
+ break;
+
+ if ((err < 0) && (errno != EAGAIN)) /* Real error */
+ goto out;
+
+ g_usleep (G_USEC_PER_SEC / 4);
+ }
+
+ if (i <= 0) {
+ nm_warning ("%s: device took too long to respond to IWRANGE query.", iface);
goto out;
+ }
if (range.we_version_compiled < 16)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]