diff options
author | Thomas Haller <thaller@redhat.com> | 2018-12-01 16:01:46 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2018-12-11 09:23:47 +0100 |
commit | df734a03bcb860344b5f25a24255617bb856af29 (patch) | |
tree | 3d1af9e2afe1228d6676102850116be73e7d0fcf | |
parent | 0c17d34a7df5a87ae65913580fa118538e02e01a (diff) | |
download | NetworkManager-df734a03bcb860344b5f25a24255617bb856af29.tar.gz |
dns: fix connecting signals to DNS plugin in init_resolv_conf_mode()
Each time when enabling/disabling "systemd-resolved" in combination with another
plugin (which is unchanged), another pair of signal handlers was
connected. That's wrong.
Fixes: d4eb4cb45f41b1751cacf71da558bf8f0988f383
-rw-r--r-- | src/dns/nm-dns-manager.c | 24 | ||||
-rw-r--r-- | src/nm-config-data.c | 3 |
2 files changed, 14 insertions, 13 deletions
diff --git a/src/dns/nm-dns-manager.c b/src/dns/nm-dns-manager.c index 9dd8784a50..5b02edb92d 100644 --- a/src/dns/nm-dns-manager.c +++ b/src/dns/nm-dns-manager.c @@ -1975,8 +1975,10 @@ init_resolv_conf_mode (NMDnsManager *self, gboolean force_reload_plugin) NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self); NMDnsManagerResolvConfManager rc_manager; const char *mode; - gboolean systemd_resolved = FALSE; - gboolean param_changed = FALSE, plugin_changed = FALSE; + gboolean systemd_resolved; + gboolean param_changed = FALSE; + gboolean plugin_changed = FALSE; + gboolean systemd_resolved_changed = FALSE; mode = nm_config_data_get_dns_mode (nm_config_get_data (priv->config)); systemd_resolved = nm_config_data_get_systemd_resolved (nm_config_get_data (priv->config)); @@ -2053,16 +2055,13 @@ again: if (systemd_resolved) { if (!priv->sd_resolve_plugin) { priv->sd_resolve_plugin = nm_dns_systemd_resolved_new (); - plugin_changed = TRUE; + systemd_resolved_changed = TRUE; } - } else { - if (priv->sd_resolve_plugin) { - g_clear_object (&priv->sd_resolve_plugin); - plugin_changed = TRUE; - } - } + } else if (nm_clear_g_object (&priv->sd_resolve_plugin)) + systemd_resolved_changed = TRUE; - if (plugin_changed && priv->plugin) { + if ( plugin_changed + && priv->plugin) { g_signal_connect (priv->plugin, NM_DNS_PLUGIN_FAILED, G_CALLBACK (plugin_failed), self); g_signal_connect (priv->plugin, NM_DNS_PLUGIN_CHILD_QUIT, G_CALLBACK (plugin_child_quit), self); } @@ -2082,9 +2081,10 @@ again: _notify (self, PROP_RC_MANAGER); } - if (param_changed || plugin_changed) { + if (param_changed || plugin_changed || systemd_resolved_changed) { _LOGI ("init: dns=%s%s rc-manager=%s%s%s%s", - mode, (systemd_resolved ? ",systemd-resolved" : ""), + mode, + (systemd_resolved ? ",systemd-resolved" : ""), _rc_manager_to_string (rc_manager), NM_PRINT_FMT_QUOTED (priv->plugin, ", plugin=", nm_dns_plugin_get_name (priv->plugin), "", "")); diff --git a/src/nm-config-data.c b/src/nm-config-data.c index 8052b66952..8ef915163f 100644 --- a/src/nm-config-data.c +++ b/src/nm-config-data.c @@ -108,9 +108,10 @@ typedef struct { char *dns_mode; char *rc_manager; - gboolean systemd_resolved; NMGlobalDnsConfig *global_dns; + + bool systemd_resolved:1; } NMConfigDataPrivate; struct _NMConfigData { |