Re: keyfile plugin initialization and wireless at boot
- From: Dan Williams <dcbw redhat com>
- To: jklimes redhat com
- Cc: networkmanager-list gnome org
- Subject: Re: keyfile plugin initialization and wireless at boot
- Date: Thu, 22 Apr 2010 17:12:46 -0700
On Tue, 2010-04-20 at 17:48 +0200, Jirka Klimes wrote:
> I've tried that as well and can confirm a problem.
>
> I rebooted to Ubuntu and added this line to /etc/network/interfaces
> iface eth0 inet dhcp
> That triggers the problem.
>
> I looked into it a bit to find the cause. This is what is going on, IMO:
Good diagnosis, though I think what we should do is something like this:
diff --git a/src/system-settings/nm-sysconfig-settings.c b/src/system-settings/nm-sysconfig-settings.c
index 0054a99..4bcfb04 100644
--- a/src/system-settings/nm-sysconfig-settings.c
+++ b/src/system-settings/nm-sysconfig-settings.c
@@ -357,8 +357,6 @@ add_plugin (NMSysconfigSettings *self, NMSystemConfigInterface *plugin)
g_signal_connect (plugin, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED,
G_CALLBACK (plugin_connection_added), self);
- g_signal_connect (plugin, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED,
- G_CALLBACK (unmanaged_specs_changed), self);
g_signal_connect (plugin, "notify::hostname", G_CALLBACK (hostname_changed), self);
nm_system_config_interface_init (plugin, NULL);
@@ -368,6 +366,9 @@ add_plugin (NMSysconfigSettings *self, NMSystemConfigInterface *plugin)
NM_SYSTEM_CONFIG_INTERFACE_INFO, &pinfo,
NULL);
+ g_signal_connect (plugin, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED,
+ G_CALLBACK (unmanaged_specs_changed), self);
+
nm_log_info (LOGD_SYS_SET, "Loaded plugin %s: %s", pname, pinfo);
g_free (pname);
g_free (pinfo);
@@ -1328,6 +1329,7 @@ nm_sysconfig_settings_new (const char *config_file,
g_object_unref (self);
return NULL;
}
+ unmanaged_specs_changed (NULL, self);
}
return self;
can you test and see if that works? If so, feel free to push to git.
Thanks!
Dan
> src/system-settings/nm-sysconfig-settings.c:load_plugins() function is used to
> load configured plugins. It adds the plugins to internal list that is used
> further in the code; this is done via add_plugin() function. In addition,
> add_plugin() funtion calls nm_system_config_interface_init (plugin, NULL) to
> initialize the plugin beeing added.
> In case of 'ifupdown' SCPluginIfupdown_init (plugin.c) is invoked and it adds
> well-known interfaces via udev_device_added().
> Here the working and not working case are forking. Without 'iface eth0 ...',
> the function returns (log message: "device added (path: %s, iface: %s): no
> ifupdown configuration found."). However with eth0 present in interfaces file,
> g_signal_emit_by_name (G_OBJECT (self),
> NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED) is called.
> That casues NM to invoke
> nm_sysconfig_settings_get_unmanaged_specs() and load_connections() in turn from
> src/system-settings/nm-sysconfig-settings.c.
> *BUT* in this moment only 'ifupdown' plugin has been loaded. And because
> load_connections() is protected via 'connections_loaded' guard, it won't load
> connections from 'keyfile' plugin later when it is added by add_plugin().
>
> The attached patch should fix the problem.
> Basically, it adds another boolean guard to load_connections() causing that
> it loads the connections only after *all* plugins have been loaded.
> Nevertheless, not sure if this is the right solution.
>
> Here is a stack from gdb (it's clearer that my description):
> Breakpoint 1, load_connections (self=0x80ef018) at nm-sysconfig-settings.c:133
> 133 NMSysconfigSettingsPrivate *priv =
> NM_SYSCONFIG_SETTINGS_GET_PRIVATE (self);
> (gdb) bt
> #0 load_connections (self=0x80ef018) at nm-sysconfig-settings.c:133
> #1 0x080b94c3 in nm_sysconfig_settings_get_unmanaged_specs (self=0x80ef018) at
> nm-sysconfig-settings.c:248
> #2 0x080bc583 in get_property (object=0x80ef018, prop_id=1, value=0x80de330,
> pspec=0x80e0340) at nm-sysconfig-settings.c:1428
> #3 0x003684b8 in g_object_get_property () from /usr/lib/libgobject-2.0.so.0
> #4 0x080b93dc in notify (object=0x80ef018, pspec=0x80e0340) at nm-sysconfig-
> settings.c:233
> #5 0x00372118 in g_cclosure_marshal_VOID__PARAM () from
> /usr/lib/libgobject-2.0.so.0
> #6 0x003636f9 in ?? () from /usr/lib/libgobject-2.0.so.0
> #7 0x00365072 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
> #8 0x0037a0b0 in ?? () from /usr/lib/libgobject-2.0.so.0
> #9 0x0037bb2d in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
> #10 0x0037bfb6 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
> #11 0x003693e1 in ?? () from /usr/lib/libgobject-2.0.so.0
> #12 0x00365daf in ?? () from /usr/lib/libgobject-2.0.so.0
> #13 0x0036aec3 in g_object_notify () from /usr/lib/libgobject-2.0.so.0
> #14 0x080b9886 in unmanaged_specs_changed (config=0x80f5640,
> user_data=0x80ef018) at nm-sysconfig-settings.c:343
> #15 0x003729fc in g_cclosure_marshal_VOID__VOID () from
> /usr/lib/libgobject-2.0.so.0
> #16 0x00365072 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
> #17 0x0037a7a8 in ?? () from /usr/lib/libgobject-2.0.so.0
> #18 0x0037bb2d in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
> #19 0x0037be42 in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0
> #20 0x002a5b33 in udev_device_added (self=0x80f5640, device=0x80e0718) at
> plugin.c:266
> #21 0x002a6469 in SCPluginIfupdown_init (config=0x80f5640) at plugin.c:448
> #22 0x080bd66b in nm_system_config_interface_init (config=0x80f5640, unused=0x0)
> at nm-system-config-interface.c:126
> #23 0x080b9ab1 in add_plugin (self=0x80ef018, plugin=0x80f5640) at nm-
> sysconfig-settings.c:374
> #24 0x080ba031 in load_plugins (self=0x80ef018, plugins=0x80e1438
> "ifupdown,keyfile", error=0xbffff6f0) at nm-sysconfig-settings.c:481
> #25 0x080bc2c1 in nm_sysconfig_settings_new (config_file=0x80df608
> "//etc/NetworkManager/nm-system-settings.conf",
> plugins=0x80e1438 "ifupdown,keyfile", bus=0x80e6b1c, error=0xbffff6f0) at nm-
> sysconfig-settings.c:1345
> #26 0x0808a77d in nm_manager_get (config_file=0x80df608
> "//etc/NetworkManager/nm-system-settings.conf",
> plugins=0x80e1438 "ifupdown,keyfile", state_file=0x80de700
> "//var/lib/NetworkManager/NetworkManager.state", initial_net_enabled=1,
> initial_wifi_enabled=1, initial_wwan_enabled=1, error=0xbffff6f0) at nm-
> manager.c:2957
> #27 0x0808359a in main (argc=1, argv=0xbffff7f4) at main.c:646
>
>
> As far as "Available to all users" is concerned, I didn't tested that
> specifically. However I think it was sensitive in my case.
>
> Jirka
> _______________________________________________
> networkmanager-list mailing list
> networkmanager-list gnome org
> http://mail.gnome.org/mailman/listinfo/networkmanager-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]