about summary refs log tree commit diff
path: root/src/dhcp-manager/nm-dhcp-dhcpcd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dhcp-manager/nm-dhcp-dhcpcd.c')
-rw-r--r--src/dhcp-manager/nm-dhcp-dhcpcd.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/dhcp-manager/nm-dhcp-dhcpcd.c b/src/dhcp-manager/nm-dhcp-dhcpcd.c
index 8bbb6e4c..17ec993a 100644
--- a/src/dhcp-manager/nm-dhcp-dhcpcd.c
+++ b/src/dhcp-manager/nm-dhcp-dhcpcd.c
@@ -44,6 +44,7 @@ G_DEFINE_TYPE (NMDhcpDhcpcd, nm_dhcp_dhcpcd, NM_TYPE_DHCP_CLIENT)
 
 typedef struct {
 	char *pid_file;
+	NMDhcpListener *dhcp_listener;
 } NMDhcpDhcpcdPrivate;
 
 static const char *
@@ -191,7 +192,10 @@ stop (NMDhcpClient *client, gboolean release, const GByteArray *duid)
 static void
 nm_dhcp_dhcpcd_init (NMDhcpDhcpcd *self)
 {
-	g_signal_connect (nm_dhcp_listener_get (),
+	NMDhcpDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (self);
+
+	priv->dhcp_listener = g_object_ref (nm_dhcp_listener_get ());
+	g_signal_connect (priv->dhcp_listener,
 	                  NM_DHCP_LISTENER_EVENT,
 	                  G_CALLBACK (nm_dhcp_client_handle_event),
 	                  self);
@@ -202,9 +206,12 @@ dispose (GObject *object)
 {
 	NMDhcpDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (object);
 
-	g_signal_handlers_disconnect_by_func (nm_dhcp_listener_get (),
-	                                      G_CALLBACK (nm_dhcp_client_handle_event),
-	                                      NM_DHCP_DHCPCD (object));
+	if (priv->dhcp_listener) {
+		g_signal_handlers_disconnect_by_func (priv->dhcp_listener,
+		                                      G_CALLBACK (nm_dhcp_client_handle_event),
+		                                      NM_DHCP_DHCPCD (object));
+		g_clear_object (&priv->dhcp_listener);
+	}
 
 	g_free (priv->pid_file);