mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-29 01:50:26 +01:00
dhcp: let dhcp clients hold a reference to NMDhcpListener
The dhclient and dhcpcd clients can be destroyed during disposal of
the DHCP manager singleton and at that point the NMDhcpListener
singleton can be already gone. Reference it in the clients.
(cherry picked from commit e5430a182c)
This commit is contained in:
parent
751e8b8914
commit
132a8abdad
2 changed files with 20 additions and 8 deletions
|
|
@ -52,6 +52,7 @@ typedef struct {
|
|||
const char *def_leasefile;
|
||||
char *lease_file;
|
||||
char *pid_file;
|
||||
NMDhcpListener *dhcp_listener;
|
||||
} NMDhcpDhclientPrivate;
|
||||
|
||||
static const char *
|
||||
|
|
@ -622,7 +623,8 @@ nm_dhcp_dhclient_init (NMDhcpDhclient *self)
|
|||
if (!priv->def_leasefile)
|
||||
priv->def_leasefile = SYSCONFDIR "/dhclient6.leases";
|
||||
|
||||
g_signal_connect (nm_dhcp_listener_get (),
|
||||
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);
|
||||
|
|
@ -633,9 +635,12 @@ dispose (GObject *object)
|
|||
{
|
||||
NMDhcpDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (object);
|
||||
|
||||
g_signal_handlers_disconnect_by_func (nm_dhcp_listener_get (),
|
||||
G_CALLBACK (nm_dhcp_client_handle_event),
|
||||
NM_DHCP_DHCLIENT (object));
|
||||
if (priv->dhcp_listener) {
|
||||
g_signal_handlers_disconnect_by_func (priv->dhcp_listener,
|
||||
G_CALLBACK (nm_dhcp_client_handle_event),
|
||||
NM_DHCP_DHCLIENT (object));
|
||||
g_clear_object (&priv->dhcp_listener);
|
||||
}
|
||||
|
||||
g_free (priv->pid_file);
|
||||
g_free (priv->conf_file);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue