device: fix leaking queued NMActiveConnection

The queued activation request must transition state to
DEACTIVATED, otherwise it is not removed from the list
of active_connections in NMManager.

(cherry picked from commit b9da094da9)
This commit is contained in:
Thomas Haller 2015-02-20 23:45:23 +01:00
parent da32e0a841
commit 1d1947b25e

View file

@ -5578,6 +5578,15 @@ disconnect_cb (NMDevice *self,
}
}
static void
_clear_queued_act_request (NMDevicePrivate *priv)
{
if (priv->queued_act_request) {
nm_active_connection_set_state ((NMActiveConnection *) priv->queued_act_request, NM_ACTIVE_CONNECTION_STATE_DEACTIVATED);
g_clear_object (&priv->queued_act_request);
}
}
static void
impl_device_disconnect (NMDevice *self, DBusGMethodInvocation *context)
{
@ -5692,7 +5701,7 @@ nm_device_queue_activation (NMDevice *self, NMActRequest *req)
}
/* supercede any already-queued request */
g_clear_object (&priv->queued_act_request);
_clear_queued_act_request (priv);
priv->queued_act_request = g_object_ref (req);
/* Deactivate existing activation request first */
@ -7489,7 +7498,7 @@ _set_state_full (NMDevice *self,
if (state <= NM_DEVICE_STATE_UNAVAILABLE) {
_clear_available_connections (self, TRUE);
g_clear_object (&priv->queued_act_request);
_clear_queued_act_request (priv);
}
/* Update the available connections list when a device first becomes available */
@ -8201,7 +8210,7 @@ dispose (GObject *object)
priv->carrier_wait_id = 0;
}
g_clear_object (&priv->queued_act_request);
_clear_queued_act_request (priv);
platform = nm_platform_get ();
g_signal_handlers_disconnect_by_func (platform, G_CALLBACK (device_ip_changed), self);