libnm-glib: NULL out priv fields on dispose()
In some situations, objects might get used after being disposed, so clear out their various priv fields so we don't try to access unreffed objects, freed strings, etc. https://bugzilla.gnome.org/show_bug.cgi?id=674473
This commit is contained in:
@@ -42,6 +42,16 @@
|
|||||||
g_simple_async_result_set_from_error (result, __error); \
|
g_simple_async_result_set_from_error (result, __error); \
|
||||||
g_error_free (__error); \
|
g_error_free (__error); \
|
||||||
} G_STMT_END
|
} G_STMT_END
|
||||||
|
|
||||||
|
#define g_clear_object(object_ptr) \
|
||||||
|
G_STMT_START { \
|
||||||
|
GObject **__obj_p = object_ptr; \
|
||||||
|
if (*__obj_p) { \
|
||||||
|
g_object_unref (*__obj_p); \
|
||||||
|
*__obj_p = NULL; \
|
||||||
|
} \
|
||||||
|
} G_STMT_END
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* NM_GLIB_COMPAT_H */
|
#endif /* NM_GLIB_COMPAT_H */
|
||||||
|
@@ -41,7 +41,6 @@ G_DEFINE_TYPE (NMAccessPoint, nm_access_point, NM_TYPE_OBJECT)
|
|||||||
#define NM_ACCESS_POINT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ACCESS_POINT, NMAccessPointPrivate))
|
#define NM_ACCESS_POINT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ACCESS_POINT, NMAccessPointPrivate))
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
gboolean disposed;
|
|
||||||
DBusGProxy *proxy;
|
DBusGProxy *proxy;
|
||||||
|
|
||||||
NM80211ApFlags flags;
|
NM80211ApFlags flags;
|
||||||
@@ -431,14 +430,7 @@ dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (object);
|
NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (priv->disposed) {
|
g_clear_object (&priv->proxy);
|
||||||
G_OBJECT_CLASS (nm_access_point_parent_class)->dispose (object);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
priv->disposed = TRUE;
|
|
||||||
|
|
||||||
g_object_unref (priv->proxy);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_access_point_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_access_point_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -49,7 +49,6 @@ G_DEFINE_TYPE_WITH_CODE (NMActiveConnection, nm_active_connection, NM_TYPE_OBJEC
|
|||||||
#define NM_ACTIVE_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ACTIVE_CONNECTION, NMActiveConnectionPrivate))
|
#define NM_ACTIVE_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ACTIVE_CONNECTION, NMActiveConnectionPrivate))
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
gboolean disposed;
|
|
||||||
DBusGProxy *proxy;
|
DBusGProxy *proxy;
|
||||||
|
|
||||||
char *connection;
|
char *connection;
|
||||||
@@ -357,18 +356,13 @@ dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
|
NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (priv->disposed) {
|
|
||||||
G_OBJECT_CLASS (nm_active_connection_parent_class)->dispose (object);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
priv->disposed = TRUE;
|
|
||||||
|
|
||||||
if (priv->devices) {
|
if (priv->devices) {
|
||||||
g_ptr_array_foreach (priv->devices, (GFunc) g_object_unref, NULL);
|
g_ptr_array_foreach (priv->devices, (GFunc) g_object_unref, NULL);
|
||||||
g_ptr_array_free (priv->devices, TRUE);
|
g_ptr_array_free (priv->devices, TRUE);
|
||||||
|
priv->devices = NULL;
|
||||||
}
|
}
|
||||||
g_object_unref (priv->proxy);
|
|
||||||
|
g_clear_object (&priv->proxy);
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_active_connection_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_active_connection_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -53,8 +53,6 @@ G_DEFINE_TYPE_WITH_CODE (NMClient, nm_client, NM_TYPE_OBJECT,
|
|||||||
#define NM_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CLIENT, NMClientPrivate))
|
#define NM_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CLIENT, NMClientPrivate))
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
gboolean disposed;
|
|
||||||
|
|
||||||
DBusGProxy *client_proxy;
|
DBusGProxy *client_proxy;
|
||||||
DBusGProxy *bus_proxy;
|
DBusGProxy *bus_proxy;
|
||||||
gboolean manager_running;
|
gboolean manager_running;
|
||||||
@@ -1517,24 +1515,23 @@ dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object);
|
NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (priv->disposed) {
|
if (priv->perm_call) {
|
||||||
G_OBJECT_CLASS (nm_client_parent_class)->dispose (object);
|
dbus_g_proxy_cancel_call (priv->client_proxy, priv->perm_call);
|
||||||
return;
|
priv->perm_call = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->perm_call)
|
g_clear_object (&priv->client_proxy);
|
||||||
dbus_g_proxy_cancel_call (priv->client_proxy, priv->perm_call);
|
g_clear_object (&priv->bus_proxy);
|
||||||
|
|
||||||
g_object_unref (priv->client_proxy);
|
|
||||||
g_object_unref (priv->bus_proxy);
|
|
||||||
|
|
||||||
free_object_array (&priv->devices);
|
free_object_array (&priv->devices);
|
||||||
dispose_and_free_object_array (&priv->active_connections);
|
dispose_and_free_object_array (&priv->active_connections);
|
||||||
|
|
||||||
g_slist_foreach (priv->pending_activations, (GFunc) activate_info_free, NULL);
|
g_slist_foreach (priv->pending_activations, (GFunc) activate_info_free, NULL);
|
||||||
g_slist_free (priv->pending_activations);
|
g_slist_free (priv->pending_activations);
|
||||||
|
priv->pending_activations = NULL;
|
||||||
|
|
||||||
g_hash_table_destroy (priv->permissions);
|
g_hash_table_destroy (priv->permissions);
|
||||||
|
priv->permissions = NULL;
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_client_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_client_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -215,10 +215,7 @@ dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
NMDeviceBondPrivate *priv = NM_DEVICE_BOND_GET_PRIVATE (object);
|
NMDeviceBondPrivate *priv = NM_DEVICE_BOND_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (priv->proxy) {
|
g_clear_object (&priv->proxy);
|
||||||
g_object_unref (priv->proxy);
|
|
||||||
priv->proxy = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_device_bond_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_device_bond_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -42,8 +42,6 @@ typedef struct {
|
|||||||
char *hw_address;
|
char *hw_address;
|
||||||
char *name;
|
char *name;
|
||||||
guint32 bt_capabilities;
|
guint32 bt_capabilities;
|
||||||
|
|
||||||
gboolean disposed;
|
|
||||||
} NMDeviceBtPrivate;
|
} NMDeviceBtPrivate;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@@ -273,13 +271,7 @@ dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
|
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (priv->disposed) {
|
g_clear_object (&priv->proxy);
|
||||||
G_OBJECT_CLASS (nm_device_bt_parent_class)->dispose (object);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
priv->disposed = TRUE;
|
|
||||||
|
|
||||||
g_object_unref (priv->proxy);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_device_bt_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_device_bt_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -44,8 +44,6 @@ typedef struct {
|
|||||||
char *perm_hw_address;
|
char *perm_hw_address;
|
||||||
guint32 speed;
|
guint32 speed;
|
||||||
gboolean carrier;
|
gboolean carrier;
|
||||||
|
|
||||||
gboolean disposed;
|
|
||||||
} NMDeviceEthernetPrivate;
|
} NMDeviceEthernetPrivate;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@@ -280,14 +278,7 @@ dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (object);
|
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (priv->disposed) {
|
g_clear_object (&priv->proxy);
|
||||||
G_OBJECT_CLASS (nm_device_ethernet_parent_class)->dispose (object);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
priv->disposed = TRUE;
|
|
||||||
|
|
||||||
g_object_unref (priv->proxy);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_device_ethernet_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_device_ethernet_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -224,10 +224,7 @@ dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (object);
|
NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (priv->proxy) {
|
g_clear_object (&priv->proxy);
|
||||||
g_object_unref (priv->proxy);
|
|
||||||
priv->proxy = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_device_infiniband_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_device_infiniband_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -44,8 +44,6 @@ typedef struct {
|
|||||||
|
|
||||||
NMDeviceModemCapabilities caps;
|
NMDeviceModemCapabilities caps;
|
||||||
NMDeviceModemCapabilities current_caps;
|
NMDeviceModemCapabilities current_caps;
|
||||||
|
|
||||||
gboolean disposed;
|
|
||||||
} NMDeviceModemPrivate;
|
} NMDeviceModemPrivate;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@@ -225,14 +223,7 @@ dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (object);
|
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (priv->disposed) {
|
g_clear_object (&priv->proxy);
|
||||||
G_OBJECT_CLASS (nm_device_modem_parent_class)->dispose (object);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
priv->disposed = TRUE;
|
|
||||||
|
|
||||||
g_object_unref (priv->proxy);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_device_modem_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_device_modem_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -227,14 +227,8 @@ dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (object);
|
NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (priv->companion) {
|
g_clear_object (&priv->companion);
|
||||||
g_object_unref (priv->companion);
|
g_clear_object (&priv->proxy);
|
||||||
priv->companion = NULL;
|
|
||||||
}
|
|
||||||
if (priv->proxy) {
|
|
||||||
g_object_unref (priv->proxy);
|
|
||||||
priv->proxy = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_device_olpc_mesh_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_device_olpc_mesh_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -238,10 +238,7 @@ dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
|
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (priv->proxy) {
|
g_clear_object (&priv->proxy);
|
||||||
g_object_unref (priv->proxy);
|
|
||||||
priv->proxy = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_device_vlan_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_device_vlan_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -43,7 +43,6 @@ G_DEFINE_TYPE (NMDeviceWifi, nm_device_wifi, NM_TYPE_DEVICE)
|
|||||||
void _nm_device_wifi_set_wireless_enabled (NMDeviceWifi *device, gboolean enabled);
|
void _nm_device_wifi_set_wireless_enabled (NMDeviceWifi *device, gboolean enabled);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
gboolean disposed;
|
|
||||||
DBusGProxy *proxy;
|
DBusGProxy *proxy;
|
||||||
|
|
||||||
char *hw_address;
|
char *hw_address;
|
||||||
@@ -608,15 +607,8 @@ dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (object);
|
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (priv->disposed) {
|
|
||||||
G_OBJECT_CLASS (nm_device_wifi_parent_class)->dispose (object);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
priv->disposed = TRUE;
|
|
||||||
|
|
||||||
clean_up_aps (NM_DEVICE_WIFI (object), FALSE);
|
clean_up_aps (NM_DEVICE_WIFI (object), FALSE);
|
||||||
g_object_unref (priv->proxy);
|
g_clear_object (&priv->proxy);
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_device_wifi_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_device_wifi_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -42,7 +42,6 @@ G_DEFINE_TYPE (NMDeviceWimax, nm_device_wimax, NM_TYPE_DEVICE)
|
|||||||
void _nm_device_wimax_set_wireless_enabled (NMDeviceWimax *wimax, gboolean enabled);
|
void _nm_device_wimax_set_wireless_enabled (NMDeviceWimax *wimax, gboolean enabled);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
gboolean disposed;
|
|
||||||
DBusGProxy *proxy;
|
DBusGProxy *proxy;
|
||||||
|
|
||||||
char *hw_address;
|
char *hw_address;
|
||||||
@@ -593,18 +592,18 @@ dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (object);
|
NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (priv->disposed) {
|
if (priv->hw_address) {
|
||||||
G_OBJECT_CLASS (nm_device_wimax_parent_class)->dispose (object);
|
g_free (priv->hw_address);
|
||||||
return;
|
priv->hw_address = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->disposed = TRUE;
|
if (priv->bsid) {
|
||||||
|
g_free (priv->bsid);
|
||||||
g_free (priv->hw_address);
|
priv->bsid = NULL;
|
||||||
g_free (priv->bsid);
|
}
|
||||||
|
|
||||||
clean_up_nsps (NM_DEVICE_WIMAX (object), FALSE);
|
clean_up_nsps (NM_DEVICE_WIMAX (object), FALSE);
|
||||||
g_object_unref (priv->proxy);
|
g_clear_object (&priv->proxy);
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_device_wimax_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_device_wimax_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -60,7 +60,6 @@ G_DEFINE_TYPE_WITH_CODE (NMDevice, nm_device, NM_TYPE_OBJECT,
|
|||||||
#define NM_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE, NMDevicePrivate))
|
#define NM_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE, NMDevicePrivate))
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
gboolean disposed;
|
|
||||||
DBusGProxy *proxy;
|
DBusGProxy *proxy;
|
||||||
|
|
||||||
char *iface;
|
char *iface;
|
||||||
@@ -265,26 +264,13 @@ dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (object);
|
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (priv->disposed) {
|
g_clear_object (&priv->proxy);
|
||||||
G_OBJECT_CLASS (nm_device_parent_class)->dispose (object);
|
g_clear_object (&priv->ip4_config);
|
||||||
return;
|
g_clear_object (&priv->dhcp4_config);
|
||||||
}
|
g_clear_object (&priv->ip6_config);
|
||||||
|
g_clear_object (&priv->dhcp6_config);
|
||||||
priv->disposed = TRUE;
|
g_clear_object (&priv->client);
|
||||||
|
g_clear_object (&priv->active_connection);
|
||||||
g_object_unref (priv->proxy);
|
|
||||||
if (priv->ip4_config)
|
|
||||||
g_object_unref (priv->ip4_config);
|
|
||||||
if (priv->dhcp4_config)
|
|
||||||
g_object_unref (priv->dhcp4_config);
|
|
||||||
if (priv->ip6_config)
|
|
||||||
g_object_unref (priv->ip6_config);
|
|
||||||
if (priv->dhcp6_config)
|
|
||||||
g_object_unref (priv->dhcp6_config);
|
|
||||||
if (priv->client)
|
|
||||||
g_object_unref (priv->client);
|
|
||||||
if (priv->active_connection)
|
|
||||||
g_object_unref (priv->active_connection);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_device_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_device_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -78,7 +78,7 @@ typedef struct {
|
|||||||
|
|
||||||
GSList *notify_props;
|
GSList *notify_props;
|
||||||
guint32 notify_id;
|
guint32 notify_id;
|
||||||
gboolean inited, disposed;
|
gboolean inited;
|
||||||
|
|
||||||
GSList *reload_results;
|
GSList *reload_results;
|
||||||
guint reload_remaining;
|
guint reload_remaining;
|
||||||
@@ -194,13 +194,6 @@ dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
|
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (priv->disposed) {
|
|
||||||
G_OBJECT_CLASS (nm_object_parent_class)->dispose (object);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
priv->disposed = TRUE;
|
|
||||||
|
|
||||||
if (priv->notify_id) {
|
if (priv->notify_id) {
|
||||||
g_source_remove (priv->notify_id);
|
g_source_remove (priv->notify_id);
|
||||||
priv->notify_id = 0;
|
priv->notify_id = 0;
|
||||||
@@ -208,12 +201,18 @@ dispose (GObject *object)
|
|||||||
|
|
||||||
g_slist_foreach (priv->notify_props, (GFunc) g_free, NULL);
|
g_slist_foreach (priv->notify_props, (GFunc) g_free, NULL);
|
||||||
g_slist_free (priv->notify_props);
|
g_slist_free (priv->notify_props);
|
||||||
|
priv->notify_props = NULL;
|
||||||
|
|
||||||
g_slist_foreach (priv->property_interfaces, (GFunc) g_free, NULL);
|
g_slist_foreach (priv->property_interfaces, (GFunc) g_free, NULL);
|
||||||
g_slist_free (priv->property_interfaces);
|
g_slist_free (priv->property_interfaces);
|
||||||
|
priv->property_interfaces = NULL;
|
||||||
|
|
||||||
g_object_unref (priv->properties_proxy);
|
g_clear_object (&priv->properties_proxy);
|
||||||
dbus_g_connection_unref (priv->connection);
|
|
||||||
|
if (priv->connection) {
|
||||||
|
dbus_g_connection_unref (priv->connection);
|
||||||
|
priv->connection = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_object_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_object_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -72,7 +72,6 @@ typedef struct {
|
|||||||
GSList *calls;
|
GSList *calls;
|
||||||
|
|
||||||
gboolean visible;
|
gboolean visible;
|
||||||
gboolean disposed;
|
|
||||||
} NMRemoteConnectionPrivate;
|
} NMRemoteConnectionPrivate;
|
||||||
|
|
||||||
#define NM_REMOTE_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_REMOTE_CONNECTION, NMRemoteConnectionPrivate))
|
#define NM_REMOTE_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_REMOTE_CONNECTION, NMRemoteConnectionPrivate))
|
||||||
@@ -477,14 +476,14 @@ dispose (GObject *object)
|
|||||||
NMRemoteConnection *self = NM_REMOTE_CONNECTION (object);
|
NMRemoteConnection *self = NM_REMOTE_CONNECTION (object);
|
||||||
NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (object);
|
NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (!priv->disposed) {
|
while (g_slist_length (priv->calls))
|
||||||
priv->disposed = TRUE;
|
remote_call_complete (self, priv->calls->data);
|
||||||
|
|
||||||
while (g_slist_length (priv->calls))
|
g_clear_object (&priv->proxy);
|
||||||
remote_call_complete (self, priv->calls->data);
|
|
||||||
|
|
||||||
g_object_unref (priv->proxy);
|
if (priv->bus) {
|
||||||
dbus_g_connection_unref (priv->bus);
|
dbus_g_connection_unref (priv->bus);
|
||||||
|
priv->bus = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_remote_connection_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_remote_connection_parent_class)->dispose (object);
|
||||||
|
@@ -61,8 +61,6 @@ typedef struct {
|
|||||||
DBusGProxy *dbus_proxy;
|
DBusGProxy *dbus_proxy;
|
||||||
|
|
||||||
guint fetch_id;
|
guint fetch_id;
|
||||||
|
|
||||||
gboolean disposed;
|
|
||||||
} NMRemoteSettingsPrivate;
|
} NMRemoteSettingsPrivate;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@@ -1043,29 +1041,35 @@ dispose (GObject *object)
|
|||||||
NMRemoteSettings *self = NM_REMOTE_SETTINGS (object);
|
NMRemoteSettings *self = NM_REMOTE_SETTINGS (object);
|
||||||
NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
|
NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self);
|
||||||
|
|
||||||
if (priv->disposed)
|
if (priv->fetch_id) {
|
||||||
return;
|
|
||||||
|
|
||||||
priv->disposed = TRUE;
|
|
||||||
|
|
||||||
if (priv->fetch_id)
|
|
||||||
g_source_remove (priv->fetch_id);
|
g_source_remove (priv->fetch_id);
|
||||||
|
priv->fetch_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
while (g_slist_length (priv->add_list))
|
while (g_slist_length (priv->add_list))
|
||||||
add_connection_info_dispose (self, (AddConnectionInfo *) priv->add_list->data);
|
add_connection_info_dispose (self, (AddConnectionInfo *) priv->add_list->data);
|
||||||
|
|
||||||
if (priv->connections)
|
if (priv->connections) {
|
||||||
g_hash_table_destroy (priv->connections);
|
g_hash_table_destroy (priv->connections);
|
||||||
|
priv->connections = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (priv->pending)
|
if (priv->pending) {
|
||||||
g_hash_table_destroy (priv->pending);
|
g_hash_table_destroy (priv->pending);
|
||||||
|
priv->pending = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
g_free (priv->hostname);
|
g_free (priv->hostname);
|
||||||
|
priv->hostname = NULL;
|
||||||
|
|
||||||
g_object_unref (priv->dbus_proxy);
|
g_clear_object (&priv->dbus_proxy);
|
||||||
g_object_unref (priv->proxy);
|
g_clear_object (&priv->proxy);
|
||||||
g_object_unref (priv->props_proxy);
|
g_clear_object (&priv->props_proxy);
|
||||||
dbus_g_connection_unref (priv->bus);
|
|
||||||
|
if (priv->bus) {
|
||||||
|
dbus_g_connection_unref (priv->bus);
|
||||||
|
priv->bus = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_remote_settings_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_remote_settings_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@@ -79,8 +79,6 @@ typedef struct {
|
|||||||
gboolean auto_register;
|
gboolean auto_register;
|
||||||
gboolean suppress_auto;
|
gboolean suppress_auto;
|
||||||
gboolean auto_register_id;
|
gboolean auto_register_id;
|
||||||
|
|
||||||
gboolean disposed;
|
|
||||||
} NMSecretAgentPrivate;
|
} NMSecretAgentPrivate;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@@ -878,29 +876,28 @@ dispose (GObject *object)
|
|||||||
NMSecretAgent *self = NM_SECRET_AGENT (object);
|
NMSecretAgent *self = NM_SECRET_AGENT (object);
|
||||||
NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
|
NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self);
|
||||||
|
|
||||||
if (!priv->disposed) {
|
if (priv->registered)
|
||||||
priv->disposed = TRUE;
|
nm_secret_agent_unregister (self);
|
||||||
|
|
||||||
if (priv->registered)
|
if (priv->auto_register_id) {
|
||||||
nm_secret_agent_unregister (self);
|
g_source_remove (priv->auto_register_id);
|
||||||
|
priv->auto_register_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (priv->auto_register_id)
|
g_free (priv->identifier);
|
||||||
g_source_remove (priv->auto_register_id);
|
priv->identifier = NULL;
|
||||||
|
g_free (priv->nm_owner);
|
||||||
|
priv->nm_owner = NULL;
|
||||||
|
|
||||||
g_free (priv->identifier);
|
while (priv->pending_gets)
|
||||||
g_free (priv->nm_owner);
|
get_secrets_info_finalize (self, priv->pending_gets->data);
|
||||||
|
|
||||||
while (priv->pending_gets)
|
g_clear_object (&priv->dbus_proxy);
|
||||||
get_secrets_info_finalize (self, priv->pending_gets->data);
|
g_clear_object (&priv->manager_proxy);
|
||||||
|
|
||||||
if (priv->dbus_proxy)
|
if (priv->bus) {
|
||||||
g_object_unref (priv->dbus_proxy);
|
dbus_g_connection_unref (priv->bus);
|
||||||
|
priv->bus = NULL;
|
||||||
if (priv->manager_proxy)
|
|
||||||
g_object_unref (priv->manager_proxy);
|
|
||||||
|
|
||||||
if (priv->bus)
|
|
||||||
dbus_g_connection_unref (priv->bus);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_secret_agent_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_secret_agent_parent_class)->dispose (object);
|
||||||
|
@@ -63,9 +63,6 @@ typedef struct {
|
|||||||
DBusGConnection *connection;
|
DBusGConnection *connection;
|
||||||
char *dbus_service_name;
|
char *dbus_service_name;
|
||||||
|
|
||||||
/* GObject-y stuff */
|
|
||||||
gboolean disposed;
|
|
||||||
|
|
||||||
/* Temporary stuff */
|
/* Temporary stuff */
|
||||||
guint connect_timer;
|
guint connect_timer;
|
||||||
guint quit_timer;
|
guint quit_timer;
|
||||||
@@ -590,15 +587,10 @@ dispose (GObject *object)
|
|||||||
NMVPNServiceState state;
|
NMVPNServiceState state;
|
||||||
GError *err = NULL;
|
GError *err = NULL;
|
||||||
|
|
||||||
if (priv->disposed) {
|
if (priv->fail_stop_id) {
|
||||||
G_OBJECT_CLASS (nm_vpn_plugin_parent_class)->dispose (object);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
priv->disposed = TRUE;
|
|
||||||
|
|
||||||
if (priv->fail_stop_id)
|
|
||||||
g_source_remove (priv->fail_stop_id);
|
g_source_remove (priv->fail_stop_id);
|
||||||
|
priv->fail_stop_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
state = nm_vpn_plugin_get_state (plugin);
|
state = nm_vpn_plugin_get_state (plugin);
|
||||||
|
|
||||||
|
@@ -37,7 +37,6 @@ G_DEFINE_TYPE (NMWimaxNsp, nm_wimax_nsp, NM_TYPE_OBJECT)
|
|||||||
#define NM_WIMAX_NSP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_WIMAX_NSP, NMWimaxNspPrivate))
|
#define NM_WIMAX_NSP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_WIMAX_NSP, NMWimaxNspPrivate))
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
gboolean disposed;
|
|
||||||
DBusGProxy *proxy;
|
DBusGProxy *proxy;
|
||||||
|
|
||||||
char *name;
|
char *name;
|
||||||
@@ -217,14 +216,7 @@ dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
NMWimaxNspPrivate *priv = NM_WIMAX_NSP_GET_PRIVATE (object);
|
NMWimaxNspPrivate *priv = NM_WIMAX_NSP_GET_PRIVATE (object);
|
||||||
|
|
||||||
if (priv->disposed) {
|
g_clear_object (&priv->proxy);
|
||||||
G_OBJECT_CLASS (nm_wimax_nsp_parent_class)->dispose (object);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
priv->disposed = TRUE;
|
|
||||||
|
|
||||||
g_object_unref (priv->proxy);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_wimax_nsp_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_wimax_nsp_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user