Update to 0.9.7.997 (0.9.8-beta2)

This commit is contained in:
Dan Williams 2013-02-09 00:36:15 -06:00
parent ca0bea6c3e
commit 3bbea25ab4
8 changed files with 23 additions and 481 deletions

View File

@ -3,11 +3,11 @@
%define glib2_version 2.24.0 %define glib2_version 2.24.0
%define wireless_tools_version 1:28-0pre9 %define wireless_tools_version 1:28-0pre9
%define libnl3_version 3.2.6 %define libnl3_version 3.2.7
%define ppp_version 2.4.5 %define ppp_version 2.4.5
%define snapshot .git20121211 %define snapshot %{nil}
%define realversion 0.9.7.0 %define realversion 0.9.7.997
%if 0%{?fedora} && 0%{?fedora} < 17 %if 0%{?fedora} && 0%{?fedora} < 17
%define systemd_dir /lib/systemd/system %define systemd_dir /lib/systemd/system
@ -18,8 +18,8 @@
Name: NetworkManager Name: NetworkManager
Summary: Network connection manager and user applications Summary: Network connection manager and user applications
Epoch: 1 Epoch: 1
Version: 0.9.7.0 Version: 0.9.7.997
Release: 13%{snapshot}%{?dist} Release: 2%{snapshot}%{?dist}
Group: System Environment/Base Group: System Environment/Base
License: GPLv2+ License: GPLv2+
URL: http://www.gnome.org/projects/NetworkManager/ URL: http://www.gnome.org/projects/NetworkManager/
@ -28,7 +28,6 @@ Source: %{name}-%{realversion}%{snapshot}.tar.bz2
Source1: NetworkManager.conf Source1: NetworkManager.conf
Patch1: explain-dns1-dns2.patch Patch1: explain-dns1-dns2.patch
Patch2: nss-error.patch Patch2: nss-error.patch
Patch3: rh876218-killmode.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@ -67,7 +66,6 @@ BuildRequires: gobject-introspection-devel >= 0.10.3
BuildRequires: gettext-devel BuildRequires: gettext-devel
BuildRequires: /usr/bin/autopoint BuildRequires: /usr/bin/autopoint
BuildRequires: pkgconfig BuildRequires: pkgconfig
BuildRequires: iptables
BuildRequires: wpa_supplicant BuildRequires: wpa_supplicant
BuildRequires: libnl3-devel >= %{libnl3_version} BuildRequires: libnl3-devel >= %{libnl3_version}
BuildRequires: perl(XML::Parser) BuildRequires: perl(XML::Parser)
@ -155,7 +153,6 @@ NetworkManager functionality from applications that use glib.
%patch1 -p1 -b .explain-dns1-dns2 %patch1 -p1 -b .explain-dns1-dns2
%patch2 -p1 -b .nss-error %patch2 -p1 -b .nss-error
%patch3 -p1 -b .killmode
%build %build
@ -167,17 +164,19 @@ autopoint --force
intltoolize --force intltoolize --force
%configure \ %configure \
--disable-static \ --disable-static \
--with-distro=redhat \
--with-dhclient=yes \ --with-dhclient=yes \
--with-dhcpcd=no \ --with-dhcpcd=no \
--with-crypto=nss \ --with-crypto=nss \
--enable-more-warnings=yes \ --enable-more-warnings=yes \
--enable-ppp=yes \
--enable-vala=yes \
%ifnarch s390 s390x %ifnarch s390 s390x
--enable-wimax=yes \ --enable-wimax=yes \
%endif %endif
--enable-polkit=yes \ --enable-polkit=yes \
--enable-modify-system=yes \ --enable-modify-system=yes \
--with-session-tracking=systemd \ --with-session-tracking=systemd \
--with-suspend-resume=systemd \
--with-docs=yes \ --with-docs=yes \
--with-system-ca-path=/etc/pki/tls/certs \ --with-system-ca-path=/etc/pki/tls/certs \
--with-tests=yes \ --with-tests=yes \
@ -212,6 +211,7 @@ make install DESTDIR=$RPM_BUILD_ROOT
%{__rm} -f $RPM_BUILD_ROOT%{_libdir}/*.la %{__rm} -f $RPM_BUILD_ROOT%{_libdir}/*.la
%{__rm} -f $RPM_BUILD_ROOT%{_libdir}/pppd/%{ppp_version}/*.la %{__rm} -f $RPM_BUILD_ROOT%{_libdir}/pppd/%{ppp_version}/*.la
%{__rm} -f $RPM_BUILD_ROOT%{_libdir}/NetworkManager/*.la %{__rm} -f $RPM_BUILD_ROOT%{_libdir}/NetworkManager/*.la
%{__rm} -f $RPM_BUILD_ROOT%{_datadir}/NetworkManager/gdb-cmd
install -m 0755 test/.libs/nm-online %{buildroot}/%{_bindir} install -m 0755 test/.libs/nm-online %{buildroot}/%{_bindir}
@ -295,10 +295,8 @@ exit 0
%{_mandir}/man1/* %{_mandir}/man1/*
%{_mandir}/man5/* %{_mandir}/man5/*
%{_mandir}/man8/* %{_mandir}/man8/*
%{_mandir}/manx/*
%dir %{_localstatedir}/lib/NetworkManager %dir %{_localstatedir}/lib/NetworkManager
%{_prefix}/libexec/nm-crash-logger
%dir %{_datadir}/NetworkManager
%{_datadir}/NetworkManager/gdb-cmd
%dir %{_sysconfdir}/NetworkManager/system-connections %dir %{_sysconfdir}/NetworkManager/system-connections
%{_datadir}/dbus-1/system-services/org.freedesktop.nm_dispatcher.service %{_datadir}/dbus-1/system-services/org.freedesktop.nm_dispatcher.service
%{_libdir}/pppd/%{ppp_version}/nm-pppd-plugin.so %{_libdir}/pppd/%{ppp_version}/nm-pppd-plugin.so
@ -359,19 +357,21 @@ exit 0
%{_datadir}/gtk-doc/html/libnm-util/* %{_datadir}/gtk-doc/html/libnm-util/*
%changelog %changelog
* Sun Jan 20 2013 Kalev Lember <kalevlember@gmail.com> - 0.9.7.0-13.git20121211 * Sat Feb 9 2013 Dan Williams <dcbw@redhat.com> - 0.9.7.997-2
- Rebuilt for libnl3 - core: use systemd for suspend/resume, not upower
* Mon Jan 14 2013 Dan Winship <danw@redhat.com> - 0.9.7.0-12.git20121211 * Fri Feb 8 2013 Dan Williams <dcbw@redhat.com> - 0.9.7.997-1
- Update to 0.9.8-beta2
- core: ignore bridges managed by other tools (rh #905035)
- core: fix libnl assert (rh #894653)
- wifi: always use Proactive Key Caching with WPA Enterprise (rh #834444)
- core: don't crash when Internet connection sharing fails to start (rh #883142)
* Fri Jan 4 2013 Dan Winship <danw@redhat.com> - 0.9.7.0-12.git20121004
- Set correct systemd KillMode to fix anaconda shutdown hangs (rh #876218) - Set correct systemd KillMode to fix anaconda shutdown hangs (rh #876218)
* Tue Dec 11 2012 Jiří Klimeš <jklimes@redhat.com> - 0.9.7.0-11.git20121211 * Tue Dec 18 2012 Jiří Klimeš <jklimes@redhat.com> - 0.9.7.0-11.git20121004
- Update to git snapshot - ifcfg-rh: write missing IPv6 setting as IPv6 with "auto" method (rh #830434)
- core: add support for bridge interfaces
- keyfile: improve IP addresses handling
- modem-manager: integrate the new `ModemManager1' interface support
- build: build system enhancements
- a lot of fixes
* Wed Dec 5 2012 Dan Winship <danw@redhat.com> - 0.9.7.0-10.git20121004 * Wed Dec 5 2012 Dan Winship <danw@redhat.com> - 0.9.7.0-10.git20121004
- Build vapi files and add them to the devel package - Build vapi files and add them to the devel package

View File

@ -1,36 +0,0 @@
From ba48be3a344b64dfb808cb6f3e545829d9884bee Mon Sep 17 00:00:00 2001
From: Dan Winship <danw@gnome.org>
Date: Fri, 5 Oct 2012 16:41:02 -0400
Subject: [PATCH 1/2] core: fix NMDevice::state-changed emission of ACTIVATED
(bgo #685581)
NMPolicy was calling nm_device_state_changed() from inside its
NMDevice::state-changed handler, which caused the D-Bus signal to get
lost. Use nm_device_queue_state() instead.
---
src/nm-policy.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/nm-policy.c b/src/nm-policy.c
index 92f771d..6722fb6 100644
--- a/src/nm-policy.c
+++ b/src/nm-policy.c
@@ -1453,11 +1453,11 @@ device_state_changed (NMDevice *device,
/* Activate secondary (VPN) connections */
if (!activate_secondary_connections (policy, connection, device))
- nm_device_state_changed (device, NM_DEVICE_STATE_FAILED,
- NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED);
+ nm_device_queue_state (device, NM_DEVICE_STATE_FAILED,
+ NM_DEVICE_STATE_REASON_SECONDARY_CONNECTION_FAILED);
} else
- nm_device_state_changed (device, NM_DEVICE_STATE_ACTIVATED,
- NM_DEVICE_STATE_REASON_NONE);
+ nm_device_queue_state (device, NM_DEVICE_STATE_ACTIVATED,
+ NM_DEVICE_STATE_REASON_NONE);
break;
default:
--
1.7.11.4

View File

@ -1,26 +0,0 @@
From b95b6c8aa1b2e2d6a662e93843e50b50d5a9c6c6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= <jklimes@redhat.com>
Date: Thu, 11 Oct 2012 14:56:37 +0200
Subject: [PATCH] core: fix a crash due to GValueArray/GArray freeing mismatch
(rh #865009)
---
src/nm-dispatcher.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/nm-dispatcher.c b/src/nm-dispatcher.c
index 0f17ed9..61dfd7c 100644
--- a/src/nm-dispatcher.c
+++ b/src/nm-dispatcher.c
@@ -200,7 +200,7 @@ dispatcher_done_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
} else
nm_log_dbg (LOGD_CORE, "Dispatcher result element %d invalid type", i);
- g_array_unref ((GArray *) item);
+ g_value_array_free (item);
}
g_ptr_array_free (results, TRUE);
} else {
--
1.7.12.1

View File

@ -1,246 +0,0 @@
From a7eb3476557dae28880333544c797705ee2f5b5a Mon Sep 17 00:00:00 2001
From: Dan Winship <danw@gnome.org>
Date: Tue, 19 Jun 2012 10:07:17 -0400
Subject: [PATCH] ifcfg-rh: /etc/hostname should override
/etc/sysconfig/network
When determining the system hostname, /etc/hostname should override
/etc/sysconfig/network, so monitor both files.
When setting the hostname, set it in /etc/hostname, and delete the
/etc/sysconfig/network HOSTNAME entry if present.
https://bugzilla.redhat.com/show_bug.cgi?id=831735
---
src/settings/plugins/ifcfg-rh/plugin.c | 130 ++++++++++++++++++++++++---------
1 file changed, 96 insertions(+), 34 deletions(-)
diff --git a/src/settings/plugins/ifcfg-rh/plugin.c b/src/settings/plugins/ifcfg-rh/plugin.c
index 04d5463..50cbdf0 100644
--- a/src/settings/plugins/ifcfg-rh/plugin.c
+++ b/src/settings/plugins/ifcfg-rh/plugin.c
@@ -80,10 +80,12 @@ typedef struct {
gulong ih_event_id;
int sc_network_wd;
+ GFileMonitor *hostname_monitor;
+ guint hostname_monitor_id;
char *hostname;
- GFileMonitor *monitor;
- guint monitor_id;
+ GFileMonitor *ifcfg_monitor;
+ guint ifcfg_monitor_id;
DBusGConnection *bus;
} SCPluginIfcfgPrivate;
@@ -325,11 +327,11 @@ connection_new_or_changed (SCPluginIfcfg *self,
}
static void
-dir_changed (GFileMonitor *monitor,
- GFile *file,
- GFile *other_file,
- GFileMonitorEvent event_type,
- gpointer user_data)
+ifcfg_dir_changed (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ gpointer user_data)
{
SCPluginIfcfg *plugin = SC_PLUGIN_IFCFG (user_data);
SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (plugin);
@@ -379,8 +381,9 @@ setup_ifcfg_monitoring (SCPluginIfcfg *plugin)
g_object_unref (file);
if (monitor) {
- priv->monitor_id = g_signal_connect (monitor, "changed", G_CALLBACK (dir_changed), plugin);
- priv->monitor = monitor;
+ priv->ifcfg_monitor_id = g_signal_connect (monitor, "changed",
+ G_CALLBACK (ifcfg_dir_changed), plugin);
+ priv->ifcfg_monitor = monitor;
}
}
@@ -463,7 +466,8 @@ add_connection (NMSystemConfigInterface *config,
return (NMSettingsConnection *) added;
}
-#define SC_NETWORK_FILE SYSCONFDIR"/sysconfig/network"
+#define SC_NETWORK_FILE "/etc/sysconfig/network"
+#define HOSTNAME_FILE "/etc/hostname"
static char *
plugin_get_hostname (SCPluginIfcfg *plugin)
@@ -472,6 +476,11 @@ plugin_get_hostname (SCPluginIfcfg *plugin)
char *hostname;
gboolean ignore_localhost;
+ if (g_file_get_contents (HOSTNAME_FILE, &hostname, NULL, NULL)) {
+ g_strchomp (hostname);
+ return hostname;
+ }
+
network = svNewFile (SC_NETWORK_FILE);
if (!network) {
PLUGIN_WARN (IFCFG_PLUGIN_NAME, "Could not get hostname: failed to read " SC_NETWORK_FILE);
@@ -500,34 +509,31 @@ plugin_set_hostname (SCPluginIfcfg *plugin, const char *hostname)
SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (plugin);
shvarFile *network;
- network = svCreateFile (SC_NETWORK_FILE);
- if (!network) {
- PLUGIN_WARN (IFCFG_PLUGIN_NAME, "Could not save hostname: failed to create/open " SC_NETWORK_FILE);
+ if (!g_file_set_contents (HOSTNAME_FILE, hostname, -1, NULL)) {
+ PLUGIN_WARN (IFCFG_PLUGIN_NAME, "Could not save hostname: failed to create/open " HOSTNAME_FILE);
return FALSE;
}
- svSetValue (network, "HOSTNAME", hostname, FALSE);
- svWriteFile (network, 0644);
- svCloseFile (network);
-
g_free (priv->hostname);
priv->hostname = g_strdup (hostname);
+
+ /* Remove "HOSTNAME" from SC_NETWORK_FILE, if present */
+ network = svNewFile (SC_NETWORK_FILE);
+ if (network) {
+ svSetValue (network, "HOSTNAME", NULL, FALSE);
+ svWriteFile (network, 0644);
+ svCloseFile (network);
+ }
+
return TRUE;
}
static void
-sc_network_changed_cb (NMInotifyHelper *ih,
- struct inotify_event *evt,
- const char *path,
- gpointer user_data)
+hostname_maybe_changed (SCPluginIfcfg *plugin)
{
- SCPluginIfcfg *plugin = SC_PLUGIN_IFCFG (user_data);
SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (plugin);
char *new_hostname;
- if (evt->wd != priv->sc_network_wd)
- return;
-
new_hostname = plugin_get_hostname (plugin);
if ( (new_hostname && !priv->hostname)
|| (!new_hostname && priv->hostname)
@@ -539,6 +545,33 @@ sc_network_changed_cb (NMInotifyHelper *ih,
g_free (new_hostname);
}
+static void
+sc_network_changed_cb (NMInotifyHelper *ih,
+ struct inotify_event *evt,
+ const char *path,
+ gpointer user_data)
+{
+ SCPluginIfcfg *plugin = SC_PLUGIN_IFCFG (user_data);
+ SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (plugin);
+
+ if (evt->wd != priv->sc_network_wd)
+ return;
+
+ hostname_maybe_changed (plugin);
+}
+
+static void
+hostname_changed_cb (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ gpointer user_data)
+{
+ SCPluginIfcfg *plugin = SC_PLUGIN_IFCFG (user_data);
+
+ hostname_maybe_changed (plugin);
+}
+
static gboolean
impl_ifcfgrh_get_ifcfg_details (SCPluginIfcfg *plugin,
const char *in_ifcfg,
@@ -614,11 +647,29 @@ sc_plugin_ifcfg_init (SCPluginIfcfg *plugin)
NMInotifyHelper *ih;
GError *error = NULL;
gboolean success = FALSE;
+ GFile *file;
+ GFileMonitor *monitor;
+
+ /* We watch SC_NETWORK_FILE via NMInotifyHelper (which doesn't track file creation but
+ * *does* track modifications made via other hard links), since we expect it to always
+ * exist. But we watch HOSTNAME_FILE via GFileMonitor (which has the opposite
+ * semantics), since /etc/hostname might not exist, but is unlikely to have hard
+ * links. bgo 532815 is the bug for being able to just use GFileMonitor for both.
+ */
ih = nm_inotify_helper_get ();
priv->ih_event_id = g_signal_connect (ih, "event", G_CALLBACK (sc_network_changed_cb), plugin);
priv->sc_network_wd = nm_inotify_helper_add_watch (ih, SC_NETWORK_FILE);
+ file = g_file_new_for_path (HOSTNAME_FILE);
+ monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, NULL);
+ g_object_unref (file);
+ if (monitor) {
+ priv->hostname_monitor_id =
+ g_signal_connect (monitor, "changed", G_CALLBACK (hostname_changed_cb), plugin);
+ priv->hostname_monitor = monitor;
+ }
+
priv->hostname = plugin_get_hostname (plugin);
priv->bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
@@ -674,24 +725,35 @@ dispose (GObject *object)
priv->bus = NULL;
}
- ih = nm_inotify_helper_get ();
+ if (priv->ih_event_id) {
+ ih = nm_inotify_helper_get ();
+
+ g_signal_handler_disconnect (ih, priv->ih_event_id);
+ priv->ih_event_id = 0;
- g_signal_handler_disconnect (ih, priv->ih_event_id);
+ if (priv->sc_network_wd >= 0)
+ nm_inotify_helper_remove_watch (ih, priv->sc_network_wd);
+ }
+
+ if (priv->hostname_monitor) {
+ if (priv->hostname_monitor_id)
+ g_signal_handler_disconnect (priv->hostname_monitor, priv->hostname_monitor_id);
- if (priv->sc_network_wd >= 0)
- nm_inotify_helper_remove_watch (ih, priv->sc_network_wd);
+ g_file_monitor_cancel (priv->hostname_monitor);
+ g_object_unref (priv->hostname_monitor);
+ }
g_free (priv->hostname);
if (priv->connections)
g_hash_table_destroy (priv->connections);
- if (priv->monitor) {
- if (priv->monitor_id)
- g_signal_handler_disconnect (priv->monitor, priv->monitor_id);
+ if (priv->ifcfg_monitor) {
+ if (priv->ifcfg_monitor_id)
+ g_signal_handler_disconnect (priv->ifcfg_monitor, priv->ifcfg_monitor_id);
- g_file_monitor_cancel (priv->monitor);
- g_object_unref (priv->monitor);
+ g_file_monitor_cancel (priv->ifcfg_monitor);
+ g_object_unref (priv->ifcfg_monitor);
}
G_OBJECT_CLASS (sc_plugin_ifcfg_parent_class)->dispose (object);
--
1.8.0

View File

@ -1,52 +0,0 @@
From 48d9bc40fb85afc8044b16400adbca7c8ff71a80 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= <jklimes@redhat.com>
Date: Wed, 14 Nov 2012 14:48:07 +0100
Subject: [PATCH 1/2] policy: fix setting system hostname (rh #875085)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Broken by commit 500315329765831d242d51d6a46f1e05869c15d2
(core: move DNS change handling to the policy and optimize DNS updates (bgo #676778))
It consolidated DNS update handling, but mistakenly removed hostname changing
from NM_DEVICE_STATE_ACTIVATED state handler.
Signed-off-by: Jiří Klimeš <jklimes@redhat.com>
---
src/nm-policy.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/src/nm-policy.c b/src/nm-policy.c
index c847586..ca7e0dc 100644
--- a/src/nm-policy.c
+++ b/src/nm-policy.c
@@ -1430,22 +1430,16 @@ device_state_changed (NMDevice *device,
nm_dns_manager_begin_updates (dns_mgr, __func__);
ip4_config = nm_device_get_ip4_config (device);
- if (ip4_config) {
+ if (ip4_config)
nm_dns_manager_add_ip4_config (dns_mgr, ip_iface, ip4_config, NM_DNS_IP_CONFIG_TYPE_DEFAULT);
- update_ip4_dns (policy, dns_mgr);
- }
ip6_config = nm_device_get_ip6_config (device);
- if (ip6_config) {
+ if (ip6_config)
nm_dns_manager_add_ip6_config (dns_mgr, ip_iface, ip6_config, NM_DNS_IP_CONFIG_TYPE_DEFAULT);
- update_ip6_dns (policy, dns_mgr);
- }
+
+ update_routing_and_dns (policy, FALSE);
nm_dns_manager_end_updates (dns_mgr, __func__);
g_object_unref (dns_mgr);
-
- /* And make sure the best devices have the default route */
- update_ip4_routing (policy, FALSE);
- update_ip6_routing (policy, FALSE);
break;
case NM_DEVICE_STATE_UNMANAGED:
case NM_DEVICE_STATE_UNAVAILABLE:
--
1.7.11.7

View File

@ -1,32 +0,0 @@
From 1d89bc0004ec27fbc0c89f17861118c78d7eeab5 Mon Sep 17 00:00:00 2001
From: Dan Winship <danw@gnome.org>
Date: Fri, 4 Jan 2013 11:53:03 -0500
Subject: [PATCH] systemd: set KillMode=process
By default, when shutting NM down, systemd will kill everything in its
cgroup. But this can cause problems (eg, NM thinking that dhclient
crashed and then taking down an interface that it would otherwise have
left up). Fix this by setting KillMode=process, which tells systemd to
only kill NM itself, and let NM kill its children.
https://bugzilla.redhat.com/show_bug.cgi?id=876218
---
data/NetworkManager.service.in | 2 ++
1 file changed, 2 insertions(+)
diff --git a/data/NetworkManager.service.in b/data/NetworkManager.service.in
index 9a5f125..16b53b6 100644
--- a/data/NetworkManager.service.in
+++ b/data/NetworkManager.service.in
@@ -12,6 +12,8 @@ ExecStart=@sbindir@/NetworkManager --no-daemon
# with LOG_PERROR when run in foreground. But systemd redirects stderr to
# syslog by default, which results in logging each message twice.
StandardError=null
+# NM doesn't want systemd to kill its children for it
+KillMode=process
[Install]
WantedBy=multi-user.target
--
1.8.0.1

View File

@ -1 +1 @@
2442913703295417da489d316db3f922 NetworkManager-0.9.7.0.git20121211.tar.bz2 1e672f496c8dac8e460ea52f24ff447a NetworkManager-0.9.7.997.tar.bz2

View File

@ -1,66 +0,0 @@
From 2e767e2399f5049b8bb5e7d9a02c78bdb962bb26 Mon Sep 17 00:00:00 2001
From: Daniel Drake <dsd@laptop.org>
Date: Mon, 26 Nov 2012 13:09:35 -0600
Subject: [PATCH] core: don't activate uninitialized devices from udev
libgudev's device matching here by default can return devices which
udev has not yet finished initializing.
This was frequently causing boot-time races on the OLPC XO, where
NetworkManager would bring a device up before udev had renamed it,
causing the later rename to fail.
To solve this, filter the enumeration matches to only include
initialized devices. The devices that are present but uninitialized
at this time will arrive a short time later, via a uevent.
https://bugs.freedesktop.org/show_bug.cgi?id=56929
---
src/nm-udev-manager.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/src/nm-udev-manager.c b/src/nm-udev-manager.c
index 792e53b..60f41aa 100644
--- a/src/nm-udev-manager.c
+++ b/src/nm-udev-manager.c
@@ -515,25 +515,35 @@ void
nm_udev_manager_query_devices (NMUdevManager *self)
{
NMUdevManagerPrivate *priv = NM_UDEV_MANAGER_GET_PRIVATE (self);
+ GUdevEnumerator *enumerator;
GList *devices, *iter;
g_return_if_fail (self != NULL);
g_return_if_fail (NM_IS_UDEV_MANAGER (self));
- devices = g_udev_client_query_by_subsystem (priv->client, "net");
+ enumerator = g_udev_enumerator_new (priv->client);
+ g_udev_enumerator_add_match_subsystem (enumerator, "net");
+ g_udev_enumerator_add_match_is_initialized (enumerator);
+
+ devices = g_udev_enumerator_execute (enumerator);
for (iter = devices; iter; iter = g_list_next (iter)) {
net_add (self, G_UDEV_DEVICE (iter->data));
g_object_unref (G_UDEV_DEVICE (iter->data));
}
g_list_free (devices);
+ g_object_unref (enumerator);
- devices = g_udev_client_query_by_subsystem (priv->client, "atm");
+ enumerator = g_udev_enumerator_new (priv->client);
+ g_udev_enumerator_add_match_subsystem (enumerator, "atm");
+ g_udev_enumerator_add_match_is_initialized (enumerator);
+ devices = g_udev_enumerator_execute (enumerator);
for (iter = devices; iter; iter = g_list_next (iter)) {
adsl_add (self, G_UDEV_DEVICE (iter->data));
g_object_unref (G_UDEV_DEVICE (iter->data));
}
g_list_free (devices);
+ g_object_unref (enumerator);
}
static void
--
1.7.11.7