Add source
This commit is contained in:
parent
aeb4a90471
commit
5a338dc86f
1
.gitignore
vendored
1
.gitignore
vendored
@ -326,3 +326,4 @@ network-manager-applet-0.8.1.tar.bz2
|
||||
/NetworkManager-1.1.93.tar.xz
|
||||
/NetworkManager-1.1.94.tar.xz
|
||||
/NetworkManager-1.2.2.tar.xz
|
||||
/NetworkManager-1.3.0.git20160621.072358da.tar.xz
|
||||
|
@ -1,531 +0,0 @@
|
||||
From 594a225264fe501ec78a8d20ee5447d18e1175b5 Mon Sep 17 00:00:00 2001
|
||||
From: Beniamino Galvani <bgalvani@redhat.com>
|
||||
Date: Tue, 31 May 2016 17:04:03 +0200
|
||||
Subject: [PATCH 1/6] core: fix some memory leaks
|
||||
|
||||
(cherry picked from commit ec53ed2cbaab754ddf1283658b5adfba8134e757)
|
||||
(cherry picked from commit 70d194c159c80266140157db535700f8e44dbe0b)
|
||||
---
|
||||
src/dhcp-manager/nm-dhcp-client.c | 2 ++
|
||||
src/nm-manager.c | 2 +-
|
||||
src/nm-policy.c | 1 +
|
||||
3 files changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/dhcp-manager/nm-dhcp-client.c b/src/dhcp-manager/nm-dhcp-client.c
|
||||
index 9f4cdf3..c102581 100644
|
||||
--- a/src/dhcp-manager/nm-dhcp-client.c
|
||||
+++ b/src/dhcp-manager/nm-dhcp-client.c
|
||||
@@ -884,7 +884,9 @@ dispose (GObject *object)
|
||||
|
||||
g_clear_pointer (&priv->iface, g_free);
|
||||
g_clear_pointer (&priv->hostname, g_free);
|
||||
+ g_clear_pointer (&priv->fqdn, g_free);
|
||||
g_clear_pointer (&priv->uuid, g_free);
|
||||
+ g_clear_pointer (&priv->client_id, g_bytes_unref);
|
||||
|
||||
if (priv->hwaddr) {
|
||||
g_byte_array_free (priv->hwaddr, TRUE);
|
||||
diff --git a/src/nm-manager.c b/src/nm-manager.c
|
||||
index e64c68a..04b70cb 100644
|
||||
--- a/src/nm-manager.c
|
||||
+++ b/src/nm-manager.c
|
||||
@@ -3268,7 +3268,7 @@ validate_activation_request (NMManager *self,
|
||||
NM_MANAGER_ERROR,
|
||||
NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE,
|
||||
"Sharing IPv6 connections is not supported yet.");
|
||||
- return NULL;
|
||||
+ goto error;
|
||||
}
|
||||
|
||||
/* Check whether it's a VPN or not */
|
||||
diff --git a/src/nm-policy.c b/src/nm-policy.c
|
||||
index 07bcce8..cb04f21 100644
|
||||
--- a/src/nm-policy.c
|
||||
+++ b/src/nm-policy.c
|
||||
@@ -913,6 +913,7 @@ block_autoconnect_for_device (NMPolicy *self, NMDevice *device)
|
||||
NM_DEVICE_STATE_REASON_USER_REQUESTED);
|
||||
}
|
||||
}
|
||||
+ g_slist_free (connections);
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
2.5.5
|
||||
|
||||
|
||||
From f5a98215c616a8a7f4acb9a3e03667444b8fda6e Mon Sep 17 00:00:00 2001
|
||||
From: Beniamino Galvani <bgalvani@redhat.com>
|
||||
Date: Tue, 24 May 2016 13:41:44 +0200
|
||||
Subject: [PATCH 2/6] dns/dnsmasq: cancel pending update on dispose
|
||||
|
||||
There might be a pending "SetServersEx" D-Bus call when the plugin is
|
||||
destroyed, ensure it gets canceled.
|
||||
|
||||
(cherry picked from commit d376787ce1a9e8c4990ed98be143ab892c9d29ed)
|
||||
(cherry picked from commit 7541ca0692668070e48adfc5fa8e4c6501600e16)
|
||||
---
|
||||
src/dns-manager/nm-dns-dnsmasq.c | 21 ++++++++++++++++-----
|
||||
1 file changed, 16 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/dns-manager/nm-dns-dnsmasq.c b/src/dns-manager/nm-dns-dnsmasq.c
|
||||
index 4cee160..1df01e3 100644
|
||||
--- a/src/dns-manager/nm-dns-dnsmasq.c
|
||||
+++ b/src/dns-manager/nm-dns-dnsmasq.c
|
||||
@@ -48,6 +48,7 @@ G_DEFINE_TYPE (NMDnsDnsmasq, nm_dns_dnsmasq, NM_TYPE_DNS_PLUGIN)
|
||||
typedef struct {
|
||||
GDBusProxy *dnsmasq;
|
||||
GCancellable *dnsmasq_cancellable;
|
||||
+ GCancellable *update_cancellable;
|
||||
gboolean running;
|
||||
|
||||
GVariant *set_server_ex_args;
|
||||
@@ -265,14 +266,20 @@ add_ip6_config (NMDnsDnsmasq *self, GVariantBuilder *servers, NMIP6Config *ip6,
|
||||
}
|
||||
|
||||
static void
|
||||
-dnsmasq_update_done (GObject *source, GAsyncResult *res, gpointer user_data)
|
||||
+dnsmasq_update_done (GDBusProxy *proxy, GAsyncResult *res, gpointer user_data)
|
||||
{
|
||||
- NMDnsDnsmasq *self = NM_DNS_DNSMASQ (user_data);
|
||||
- NMDnsDnsmasqPrivate *priv = NM_DNS_DNSMASQ_GET_PRIVATE (self);
|
||||
+ NMDnsDnsmasq *self;
|
||||
+ NMDnsDnsmasqPrivate *priv;
|
||||
gs_free_error GError *error = NULL;
|
||||
gs_unref_variant GVariant *response = NULL;
|
||||
|
||||
- response = g_dbus_proxy_call_finish (priv->dnsmasq, res, &error);
|
||||
+ response = g_dbus_proxy_call_finish (proxy, res, &error);
|
||||
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||
+ return;
|
||||
+
|
||||
+ self = NM_DNS_DNSMASQ (user_data);
|
||||
+ priv = NM_DNS_DNSMASQ_GET_PRIVATE (self);
|
||||
+
|
||||
if (!response)
|
||||
_LOGW ("dnsmasq update failed: %s", error->message);
|
||||
else
|
||||
@@ -290,12 +297,15 @@ send_dnsmasq_update (NMDnsDnsmasq *self)
|
||||
if (priv->running) {
|
||||
_LOGD ("trying to update dnsmasq nameservers");
|
||||
|
||||
+ nm_clear_g_cancellable (&priv->update_cancellable);
|
||||
+ priv->update_cancellable = g_cancellable_new ();
|
||||
+
|
||||
g_dbus_proxy_call (priv->dnsmasq,
|
||||
"SetServersEx",
|
||||
priv->set_server_ex_args,
|
||||
G_DBUS_CALL_FLAGS_NONE,
|
||||
-1,
|
||||
- NULL,
|
||||
+ priv->update_cancellable,
|
||||
(GAsyncReadyCallback) dnsmasq_update_done,
|
||||
self);
|
||||
g_clear_pointer (&priv->set_server_ex_args, g_variant_unref);
|
||||
@@ -559,6 +569,7 @@ dispose (GObject *object)
|
||||
NMDnsDnsmasqPrivate *priv = NM_DNS_DNSMASQ_GET_PRIVATE (object);
|
||||
|
||||
nm_clear_g_cancellable (&priv->dnsmasq_cancellable);
|
||||
+ nm_clear_g_cancellable (&priv->update_cancellable);
|
||||
|
||||
g_clear_object (&priv->dnsmasq);
|
||||
|
||||
--
|
||||
2.5.5
|
||||
|
||||
|
||||
From ac4bfce7dde54a607c896e90a3269633a90f3bee Mon Sep 17 00:00:00 2001
|
||||
From: Beniamino Galvani <bgalvani@redhat.com>
|
||||
Date: Tue, 24 May 2016 14:14:25 +0200
|
||||
Subject: [PATCH 3/6] dns: clear dnsmasq cache after an update
|
||||
|
||||
When the list of DNS servers changes, old DNS entries cached by
|
||||
dnsmasq must be invalidated as the answers returned by new servers may
|
||||
be different (especially, old NXDOMAIN entries may now be valid). Call
|
||||
the dnsmasq "ClearCache" D-Bus method to achieve this.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1338731
|
||||
(cherry picked from commit 4feb58b50b9fd6caceda83bab907ad107ad8ed01)
|
||||
(cherry picked from commit a701e5b7ba35a0730d756ab0c1b15f0414bee592)
|
||||
---
|
||||
src/dns-manager/nm-dns-dnsmasq.c | 31 +++++++++++++++++++++++++++++--
|
||||
1 file changed, 29 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/dns-manager/nm-dns-dnsmasq.c b/src/dns-manager/nm-dns-dnsmasq.c
|
||||
index 1df01e3..dd1234d 100644
|
||||
--- a/src/dns-manager/nm-dns-dnsmasq.c
|
||||
+++ b/src/dns-manager/nm-dns-dnsmasq.c
|
||||
@@ -266,6 +266,25 @@ add_ip6_config (NMDnsDnsmasq *self, GVariantBuilder *servers, NMIP6Config *ip6,
|
||||
}
|
||||
|
||||
static void
|
||||
+dnsmasq_clear_cache_done (GDBusProxy *proxy, GAsyncResult *res, gpointer user_data)
|
||||
+{
|
||||
+ NMDnsDnsmasq *self;
|
||||
+ gs_free_error GError *error = NULL;
|
||||
+ gs_unref_variant GVariant *response = NULL;
|
||||
+
|
||||
+ response = g_dbus_proxy_call_finish (proxy, res, &error);
|
||||
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||
+ return;
|
||||
+
|
||||
+ self = NM_DNS_DNSMASQ (user_data);
|
||||
+
|
||||
+ if (!response)
|
||||
+ _LOGW ("dnsmasq cache clear failed: %s", error->message);
|
||||
+ else
|
||||
+ _LOGD ("dnsmasq update successful, cache cleared");
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
dnsmasq_update_done (GDBusProxy *proxy, GAsyncResult *res, gpointer user_data)
|
||||
{
|
||||
NMDnsDnsmasq *self;
|
||||
@@ -282,8 +301,16 @@ dnsmasq_update_done (GDBusProxy *proxy, GAsyncResult *res, gpointer user_data)
|
||||
|
||||
if (!response)
|
||||
_LOGW ("dnsmasq update failed: %s", error->message);
|
||||
- else
|
||||
- _LOGD ("dnsmasq update successful");
|
||||
+ else {
|
||||
+ g_dbus_proxy_call (priv->dnsmasq,
|
||||
+ "ClearCache",
|
||||
+ NULL,
|
||||
+ G_DBUS_CALL_FLAGS_NONE,
|
||||
+ -1,
|
||||
+ priv->update_cancellable,
|
||||
+ (GAsyncReadyCallback) dnsmasq_clear_cache_done,
|
||||
+ self);
|
||||
+ }
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
2.5.5
|
||||
|
||||
|
||||
From b71ce01f5aa5af2851a4c5516a1c11b86b65b4b8 Mon Sep 17 00:00:00 2001
|
||||
From: Beniamino Galvani <bgalvani@redhat.com>
|
||||
Date: Sun, 1 May 2016 22:24:41 +0200
|
||||
Subject: [PATCH 4/6] core: introduce nm_utils_dnsmasq_status_to_string()
|
||||
|
||||
(cherry picked from commit c0d322720a3956a40831c09f78a1dfbaf6fd9294)
|
||||
(cherry picked from commit 84b0bb5ec82661a2b47928cc49879ed49fa18602)
|
||||
---
|
||||
src/dns-manager/nm-dns-dnsmasq.c | 23 ++------------------
|
||||
src/dnsmasq-manager/nm-dnsmasq-manager.c | 36 ++++---------------------------
|
||||
src/nm-core-utils.c | 37 ++++++++++++++++++++++++++++++++
|
||||
src/nm-core-utils.h | 2 ++
|
||||
4 files changed, 45 insertions(+), 53 deletions(-)
|
||||
|
||||
diff --git a/src/dns-manager/nm-dns-dnsmasq.c b/src/dns-manager/nm-dns-dnsmasq.c
|
||||
index dd1234d..aaa6a3e 100644
|
||||
--- a/src/dns-manager/nm-dns-dnsmasq.c
|
||||
+++ b/src/dns-manager/nm-dns-dnsmasq.c
|
||||
@@ -519,24 +519,6 @@ update (NMDnsPlugin *plugin,
|
||||
|
||||
/****************************************************************/
|
||||
|
||||
-static const char *
|
||||
-dm_exit_code_to_msg (int status)
|
||||
-{
|
||||
- if (status == 1)
|
||||
- return "Configuration problem";
|
||||
- else if (status == 2)
|
||||
- return "Network access problem (address in use; permissions; etc)";
|
||||
- else if (status == 3)
|
||||
- return "Filesystem problem (missing file/directory; permissions; etc)";
|
||||
- else if (status == 4)
|
||||
- return "Memory allocation failure";
|
||||
- else if (status == 5)
|
||||
- return "Other problem";
|
||||
- else if (status >= 11)
|
||||
- return "Lease-script 'init' process failure";
|
||||
- return "Unknown error";
|
||||
-}
|
||||
-
|
||||
static void
|
||||
child_quit (NMDnsPlugin *plugin, gint status)
|
||||
{
|
||||
@@ -547,9 +529,8 @@ child_quit (NMDnsPlugin *plugin, gint status)
|
||||
if (WIFEXITED (status)) {
|
||||
err = WEXITSTATUS (status);
|
||||
if (err) {
|
||||
- _LOGW ("dnsmasq exited with error: %s (%d)",
|
||||
- dm_exit_code_to_msg (err),
|
||||
- err);
|
||||
+ _LOGW ("dnsmasq exited with error: %s",
|
||||
+ nm_utils_dnsmasq_status_to_string (err, NULL, 0));
|
||||
} else
|
||||
failed = FALSE;
|
||||
} else if (WIFSTOPPED (status))
|
||||
diff --git a/src/dnsmasq-manager/nm-dnsmasq-manager.c b/src/dnsmasq-manager/nm-dnsmasq-manager.c
|
||||
index 764aba2..12395db 100644
|
||||
--- a/src/dnsmasq-manager/nm-dnsmasq-manager.c
|
||||
+++ b/src/dnsmasq-manager/nm-dnsmasq-manager.c
|
||||
@@ -165,36 +165,6 @@ nm_cmd_line_add_string (NMCmdLine *cmd, const char *str)
|
||||
/*******************************************/
|
||||
|
||||
static void
|
||||
-dm_exit_code (guint dm_exit_status)
|
||||
-{
|
||||
- char *msg = "Unknown error";
|
||||
-
|
||||
- switch (dm_exit_status) {
|
||||
- case 1:
|
||||
- msg = "Configuration problem";
|
||||
- break;
|
||||
- case 2:
|
||||
- msg = "Network access problem (address in use; permissions; etc)";
|
||||
- break;
|
||||
- case 3:
|
||||
- msg = "Filesystem problem (missing file/directory; permissions; etc)";
|
||||
- break;
|
||||
- case 4:
|
||||
- msg = "Memory allocation failure";
|
||||
- break;
|
||||
- case 5:
|
||||
- msg = "Other problem";
|
||||
- break;
|
||||
- default:
|
||||
- if (dm_exit_status >= 11)
|
||||
- msg = "Lease-script 'init' process failure";
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
- _LOGW ("dnsmasq exited with error: %s (%d)", msg, dm_exit_status);
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
dm_watch_cb (GPid pid, gint status, gpointer user_data)
|
||||
{
|
||||
NMDnsMasqManager *manager = NM_DNSMASQ_MANAGER (user_data);
|
||||
@@ -203,8 +173,10 @@ dm_watch_cb (GPid pid, gint status, gpointer user_data)
|
||||
|
||||
if (WIFEXITED (status)) {
|
||||
err = WEXITSTATUS (status);
|
||||
- if (err != 0)
|
||||
- dm_exit_code (err);
|
||||
+ if (err != 0) {
|
||||
+ _LOGW ("dnsmasq exited with error: %s",
|
||||
+ nm_utils_dnsmasq_status_to_string (err, NULL, 0));
|
||||
+ }
|
||||
} else if (WIFSTOPPED (status)) {
|
||||
_LOGW ("dnsmasq stopped unexpectedly with signal %d", WSTOPSIG (status));
|
||||
} else if (WIFSIGNALED (status)) {
|
||||
diff --git a/src/nm-core-utils.c b/src/nm-core-utils.c
|
||||
index ef44a13..a2fbdfb 100644
|
||||
--- a/src/nm-core-utils.c
|
||||
+++ b/src/nm-core-utils.c
|
||||
@@ -3085,3 +3085,40 @@ nm_utils_lifetime_get (guint32 timestamp,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+const char *
|
||||
+nm_utils_dnsmasq_status_to_string (int status, char *dest, guint size)
|
||||
+{
|
||||
+ static char buffer[128];
|
||||
+ char *msg, *ret;
|
||||
+ gs_free char *msg_free = NULL;
|
||||
+ int len;
|
||||
+
|
||||
+ if (status == 0)
|
||||
+ msg = "Success";
|
||||
+ else if (status == 1)
|
||||
+ msg = "Configuration problem";
|
||||
+ else if (status == 2)
|
||||
+ msg = "Network access problem (address in use, permissions)";
|
||||
+ else if (status == 3)
|
||||
+ msg = "Filesystem problem (missing file/directory, permissions)";
|
||||
+ else if (status == 4)
|
||||
+ msg = "Memory allocation failure";
|
||||
+ else if (status == 5)
|
||||
+ msg = "Other problem";
|
||||
+ else if (status >= 11)
|
||||
+ msg = msg_free = g_strdup_printf ("Lease script failed with error %d", status - 10);
|
||||
+ else
|
||||
+ msg = "Unknown problem";
|
||||
+
|
||||
+ if (dest) {
|
||||
+ ret = dest;
|
||||
+ len = size;
|
||||
+ } else {
|
||||
+ ret = buffer;
|
||||
+ len = sizeof (buffer);
|
||||
+ }
|
||||
+
|
||||
+ g_snprintf (ret, len, "%s (%d)", msg, status);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
diff --git a/src/nm-core-utils.h b/src/nm-core-utils.h
|
||||
index ad0f995..b5083ac 100644
|
||||
--- a/src/nm-core-utils.h
|
||||
+++ b/src/nm-core-utils.h
|
||||
@@ -394,4 +394,6 @@ gboolean nm_utils_lifetime_get (guint32 timestamp,
|
||||
|
||||
gboolean nm_utils_ip4_address_is_link_local (in_addr_t addr);
|
||||
|
||||
+const char *nm_utils_dnsmasq_status_to_string (int status, char *dest, guint size);
|
||||
+
|
||||
#endif /* __NM_CORE_UTILS_H__ */
|
||||
--
|
||||
2.5.5
|
||||
|
||||
|
||||
From 4e78e89ac35954d38ff107c42295b1418042a13c Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Mon, 30 May 2016 12:52:23 +0200
|
||||
Subject: [PATCH 5/6] dns: log when dnsmasq process exits normally
|
||||
|
||||
(cherry picked from commit a64d70f0df586d398aa1bcd74be131ed6dc75450)
|
||||
(cherry picked from commit 2deee5286726fb2933822e105ffce634df695b35)
|
||||
---
|
||||
src/dns-manager/nm-dns-dnsmasq.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/dns-manager/nm-dns-dnsmasq.c b/src/dns-manager/nm-dns-dnsmasq.c
|
||||
index aaa6a3e..f8b2dd3 100644
|
||||
--- a/src/dns-manager/nm-dns-dnsmasq.c
|
||||
+++ b/src/dns-manager/nm-dns-dnsmasq.c
|
||||
@@ -531,8 +531,10 @@ child_quit (NMDnsPlugin *plugin, gint status)
|
||||
if (err) {
|
||||
_LOGW ("dnsmasq exited with error: %s",
|
||||
nm_utils_dnsmasq_status_to_string (err, NULL, 0));
|
||||
- } else
|
||||
+ } else {
|
||||
+ _LOGD ("dnsmasq exited normally");
|
||||
failed = FALSE;
|
||||
+ }
|
||||
} else if (WIFSTOPPED (status))
|
||||
_LOGW ("dnsmasq stopped unexpectedly with signal %d", WSTOPSIG (status));
|
||||
else if (WIFSIGNALED (status))
|
||||
--
|
||||
2.5.5
|
||||
|
||||
|
||||
From 3061adfc7d962ef645f2844dfce7df5e359509b5 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Mon, 30 May 2016 12:58:57 +0200
|
||||
Subject: [PATCH 6/6] dnsmasq: properly handling respawning of dnsmask
|
||||
|
||||
Otherwise, when killing dnsmasq it does not get respawned:
|
||||
|
||||
dnsmasq[0x560dd7e43cf0]: dnsmasq exited normally
|
||||
dns-mgr: plugin dnsmasq child quit unexpectedly
|
||||
dns-mgr: update-dns: updating resolv.conf
|
||||
dns-mgr: config: 100 best v4 enp0s25
|
||||
dns-mgr: config: 100 best v6 enp0s25
|
||||
dns-mgr: config: 100 default v6 lo
|
||||
dns-mgr: config: 100 default v4 lo
|
||||
dns-mgr: update-dns: updating plugin dnsmasq
|
||||
dnsmasq[0x560dd7e43cf0]: adding nameserver '192.168.0.2@enp0s25'
|
||||
dnsmasq[0x560dd7e43cf0]: trying to update dnsmasq nameservers
|
||||
dns-mgr: update-resolv-conf: write internal file /var/run/NetworkManager/resolv.conf succeeded but don't update /etc/resolv.conf as it points to resolv.conf.nm
|
||||
dnsmasq[0x560dd7e43cf0]: dnsmasq disappeared
|
||||
|
||||
Previously, we would create priv->dnsmasq proxy only once,
|
||||
and not respawn the process at all.
|
||||
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=766996
|
||||
(cherry picked from commit 2e7f4aeb60579b092641cc8d65973baecbd5335b)
|
||||
(cherry picked from commit 1f8ba33d8716858cc27cf319c85e176bcf11afa3)
|
||||
---
|
||||
src/dns-manager/nm-dns-dnsmasq.c | 21 ++++++++++++++++++---
|
||||
src/dns-manager/nm-dns-plugin.c | 11 +++++++++++
|
||||
src/dns-manager/nm-dns-plugin.h | 2 ++
|
||||
3 files changed, 31 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/dns-manager/nm-dns-dnsmasq.c b/src/dns-manager/nm-dns-dnsmasq.c
|
||||
index f8b2dd3..a9fcc88 100644
|
||||
--- a/src/dns-manager/nm-dns-dnsmasq.c
|
||||
+++ b/src/dns-manager/nm-dns-dnsmasq.c
|
||||
@@ -410,11 +410,16 @@ start_dnsmasq (NMDnsDnsmasq *self)
|
||||
NMBusManager *dbus_mgr;
|
||||
GDBusConnection *connection;
|
||||
|
||||
+ if (priv->running) {
|
||||
+ /* the dnsmasq process is running. Nothing to do. */
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
- if ( priv->running
|
||||
- || priv->dnsmasq
|
||||
- || priv->dnsmasq_cancellable)
|
||||
+ if (nm_dns_plugin_child_pid ((NMDnsPlugin *) self) > 0) {
|
||||
+ /* if we already have a child process spawned, don't do
|
||||
+ * it again. */
|
||||
return;
|
||||
+ }
|
||||
|
||||
dm_binary = nm_utils_find_helper ("dnsmasq", DNSMASQ_PATH, NULL);
|
||||
if (!dm_binary) {
|
||||
@@ -446,6 +451,13 @@ start_dnsmasq (NMDnsDnsmasq *self)
|
||||
if (!pid)
|
||||
return;
|
||||
|
||||
+ if ( priv->dnsmasq
|
||||
+ || priv->dnsmasq_cancellable) {
|
||||
+ /* we already have a proxy or are about to create it.
|
||||
+ * We are done. */
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
dbus_mgr = nm_bus_manager_get ();
|
||||
g_return_if_fail (dbus_mgr);
|
||||
|
||||
@@ -523,6 +535,7 @@ static void
|
||||
child_quit (NMDnsPlugin *plugin, gint status)
|
||||
{
|
||||
NMDnsDnsmasq *self = NM_DNS_DNSMASQ (plugin);
|
||||
+ NMDnsDnsmasqPrivate *priv = NM_DNS_DNSMASQ_GET_PRIVATE (self);
|
||||
gboolean failed = TRUE;
|
||||
int err;
|
||||
|
||||
@@ -542,6 +555,8 @@ child_quit (NMDnsPlugin *plugin, gint status)
|
||||
else
|
||||
_LOGW ("dnsmasq died from an unknown cause");
|
||||
|
||||
+ priv->running = FALSE;
|
||||
+
|
||||
if (failed)
|
||||
g_signal_emit_by_name (self, NM_DNS_PLUGIN_FAILED);
|
||||
}
|
||||
diff --git a/src/dns-manager/nm-dns-plugin.c b/src/dns-manager/nm-dns-plugin.c
|
||||
index d5cb882..f45b47f 100644
|
||||
--- a/src/dns-manager/nm-dns-plugin.c
|
||||
+++ b/src/dns-manager/nm-dns-plugin.c
|
||||
@@ -182,6 +182,17 @@ watch_cb (GPid pid, gint status, gpointer user_data)
|
||||
}
|
||||
|
||||
GPid
|
||||
+nm_dns_plugin_child_pid (NMDnsPlugin *self)
|
||||
+{
|
||||
+ NMDnsPluginPrivate *priv;
|
||||
+
|
||||
+ g_return_val_if_fail (NM_IS_DNS_PLUGIN (self), 0);
|
||||
+
|
||||
+ priv = NM_DNS_PLUGIN_GET_PRIVATE (self);
|
||||
+ return priv->pid;
|
||||
+}
|
||||
+
|
||||
+GPid
|
||||
nm_dns_plugin_child_spawn (NMDnsPlugin *self,
|
||||
const char **argv,
|
||||
const char *pidfile,
|
||||
diff --git a/src/dns-manager/nm-dns-plugin.h b/src/dns-manager/nm-dns-plugin.h
|
||||
index 7ecaa42..b328218 100644
|
||||
--- a/src/dns-manager/nm-dns-plugin.h
|
||||
+++ b/src/dns-manager/nm-dns-plugin.h
|
||||
@@ -111,6 +111,8 @@ GPid nm_dns_plugin_child_spawn (NMDnsPlugin *self,
|
||||
const char *pidfile,
|
||||
const char *kill_match);
|
||||
|
||||
+GPid nm_dns_plugin_child_pid (NMDnsPlugin *self);
|
||||
+
|
||||
gboolean nm_dns_plugin_child_kill (NMDnsPlugin *self);
|
||||
|
||||
#endif /* __NETWORKMANAGER_DNS_PLUGIN_H__ */
|
||||
--
|
||||
2.5.5
|
||||
|
Loading…
Reference in New Issue
Block a user