Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2:PowerPC
NetworkManager
nm-null-out-on-dispose.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File nm-null-out-on-dispose.patch of Package NetworkManager
commit be18dd06cd138be232ff68ec7af19cfcf2f969ed Author: Dan Winship <danw@gnome.org> Date: Mon Apr 23 11:02:48 2012 -0400 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 Index: NetworkManager-0.9.4.0/include/nm-glib-compat.h =================================================================== --- NetworkManager-0.9.4.0.orig/include/nm-glib-compat.h +++ NetworkManager-0.9.4.0/include/nm-glib-compat.h @@ -42,6 +42,16 @@ g_simple_async_result_set_from_error (result, __error); \ g_error_free (__error); \ } 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 /* NM_GLIB_COMPAT_H */ Index: NetworkManager-0.9.4.0/libnm-glib/nm-access-point.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-access-point.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-access-point.c @@ -41,7 +41,6 @@ G_DEFINE_TYPE (NMAccessPoint, nm_access_ #define NM_ACCESS_POINT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ACCESS_POINT, NMAccessPointPrivate)) typedef struct { - gboolean disposed; DBusGProxy *proxy; NM80211ApFlags flags; @@ -431,14 +430,7 @@ dispose (GObject *object) { NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (object); - if (priv->disposed) { - G_OBJECT_CLASS (nm_access_point_parent_class)->dispose (object); - return; - } - - priv->disposed = TRUE; - - g_object_unref (priv->proxy); + g_clear_object (&priv->proxy); G_OBJECT_CLASS (nm_access_point_parent_class)->dispose (object); } Index: NetworkManager-0.9.4.0/libnm-glib/nm-active-connection.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-active-connection.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-active-connection.c @@ -49,7 +49,6 @@ G_DEFINE_TYPE_WITH_CODE (NMActiveConnect #define NM_ACTIVE_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ACTIVE_CONNECTION, NMActiveConnectionPrivate)) typedef struct { - gboolean disposed; DBusGProxy *proxy; char *connection; @@ -357,18 +356,13 @@ dispose (GObject *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) { g_ptr_array_foreach (priv->devices, (GFunc) g_object_unref, NULL); 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); } Index: NetworkManager-0.9.4.0/libnm-glib/nm-client.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-client.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-client.c @@ -53,8 +53,6 @@ G_DEFINE_TYPE_WITH_CODE (NMClient, nm_cl #define NM_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CLIENT, NMClientPrivate)) typedef struct { - gboolean disposed; - DBusGProxy *client_proxy; DBusGProxy *bus_proxy; gboolean manager_running; @@ -1517,24 +1515,23 @@ dispose (GObject *object) { NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object); - if (priv->disposed) { - G_OBJECT_CLASS (nm_client_parent_class)->dispose (object); - return; - } - - if (priv->perm_call) + if (priv->perm_call) { dbus_g_proxy_cancel_call (priv->client_proxy, priv->perm_call); + priv->perm_call = NULL; + } - g_object_unref (priv->client_proxy); - g_object_unref (priv->bus_proxy); + g_clear_object (&priv->client_proxy); + g_clear_object (&priv->bus_proxy); free_object_array (&priv->devices); dispose_and_free_object_array (&priv->active_connections); g_slist_foreach (priv->pending_activations, (GFunc) activate_info_free, NULL); g_slist_free (priv->pending_activations); + priv->pending_activations = NULL; g_hash_table_destroy (priv->permissions); + priv->permissions = NULL; G_OBJECT_CLASS (nm_client_parent_class)->dispose (object); } Index: NetworkManager-0.9.4.0/libnm-glib/nm-device-bond.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-device-bond.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-device-bond.c @@ -215,10 +215,7 @@ dispose (GObject *object) { NMDeviceBondPrivate *priv = NM_DEVICE_BOND_GET_PRIVATE (object); - if (priv->proxy) { - g_object_unref (priv->proxy); - priv->proxy = NULL; - } + g_clear_object (&priv->proxy); G_OBJECT_CLASS (nm_device_bond_parent_class)->dispose (object); } Index: NetworkManager-0.9.4.0/libnm-glib/nm-device-bt.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-device-bt.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-device-bt.c @@ -42,8 +42,6 @@ typedef struct { char *hw_address; char *name; guint32 bt_capabilities; - - gboolean disposed; } NMDeviceBtPrivate; enum { @@ -273,13 +271,7 @@ dispose (GObject *object) { NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object); - if (priv->disposed) { - G_OBJECT_CLASS (nm_device_bt_parent_class)->dispose (object); - return; - } - priv->disposed = TRUE; - - g_object_unref (priv->proxy); + g_clear_object (&priv->proxy); G_OBJECT_CLASS (nm_device_bt_parent_class)->dispose (object); } Index: NetworkManager-0.9.4.0/libnm-glib/nm-device-ethernet.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-device-ethernet.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-device-ethernet.c @@ -44,8 +44,6 @@ typedef struct { char *perm_hw_address; guint32 speed; gboolean carrier; - - gboolean disposed; } NMDeviceEthernetPrivate; enum { @@ -280,14 +278,7 @@ dispose (GObject *object) { NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (object); - if (priv->disposed) { - G_OBJECT_CLASS (nm_device_ethernet_parent_class)->dispose (object); - return; - } - - priv->disposed = TRUE; - - g_object_unref (priv->proxy); + g_clear_object (&priv->proxy); G_OBJECT_CLASS (nm_device_ethernet_parent_class)->dispose (object); } Index: NetworkManager-0.9.4.0/libnm-glib/nm-device-infiniband.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-device-infiniband.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-device-infiniband.c @@ -224,10 +224,7 @@ dispose (GObject *object) { NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (object); - if (priv->proxy) { - g_object_unref (priv->proxy); - priv->proxy = NULL; - } + g_clear_object (&priv->proxy); G_OBJECT_CLASS (nm_device_infiniband_parent_class)->dispose (object); } Index: NetworkManager-0.9.4.0/libnm-glib/nm-device-modem.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-device-modem.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-device-modem.c @@ -44,8 +44,6 @@ typedef struct { NMDeviceModemCapabilities caps; NMDeviceModemCapabilities current_caps; - - gboolean disposed; } NMDeviceModemPrivate; enum { @@ -225,14 +223,7 @@ dispose (GObject *object) { NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (object); - if (priv->disposed) { - G_OBJECT_CLASS (nm_device_modem_parent_class)->dispose (object); - return; - } - - priv->disposed = TRUE; - - g_object_unref (priv->proxy); + g_clear_object (&priv->proxy); G_OBJECT_CLASS (nm_device_modem_parent_class)->dispose (object); } Index: NetworkManager-0.9.4.0/libnm-glib/nm-device-olpc-mesh.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-device-olpc-mesh.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-device-olpc-mesh.c @@ -227,14 +227,8 @@ dispose (GObject *object) { NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (object); - if (priv->companion) { - g_object_unref (priv->companion); - priv->companion = NULL; - } - if (priv->proxy) { - g_object_unref (priv->proxy); - priv->proxy = NULL; - } + g_clear_object (&priv->companion); + g_clear_object (&priv->proxy); G_OBJECT_CLASS (nm_device_olpc_mesh_parent_class)->dispose (object); } Index: NetworkManager-0.9.4.0/libnm-glib/nm-device-vlan.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-device-vlan.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-device-vlan.c @@ -238,10 +238,7 @@ dispose (GObject *object) { NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object); - if (priv->proxy) { - g_object_unref (priv->proxy); - priv->proxy = NULL; - } + g_clear_object (&priv->proxy); G_OBJECT_CLASS (nm_device_vlan_parent_class)->dispose (object); } Index: NetworkManager-0.9.4.0/libnm-glib/nm-device-wifi.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-device-wifi.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-device-wifi.c @@ -43,7 +43,6 @@ G_DEFINE_TYPE (NMDeviceWifi, nm_device_w void _nm_device_wifi_set_wireless_enabled (NMDeviceWifi *device, gboolean enabled); typedef struct { - gboolean disposed; DBusGProxy *proxy; char *hw_address; @@ -659,15 +658,8 @@ dispose (GObject *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); - g_object_unref (priv->proxy); + g_clear_object (&priv->proxy); G_OBJECT_CLASS (nm_device_wifi_parent_class)->dispose (object); } Index: NetworkManager-0.9.4.0/libnm-glib/nm-device-wimax.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-device-wimax.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-device-wimax.c @@ -42,7 +42,6 @@ G_DEFINE_TYPE (NMDeviceWimax, nm_device_ void _nm_device_wimax_set_wireless_enabled (NMDeviceWimax *wimax, gboolean enabled); typedef struct { - gboolean disposed; DBusGProxy *proxy; char *hw_address; @@ -593,18 +592,18 @@ dispose (GObject *object) { NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (object); - if (priv->disposed) { - G_OBJECT_CLASS (nm_device_wimax_parent_class)->dispose (object); - return; + if (priv->hw_address) { + g_free (priv->hw_address); + priv->hw_address = NULL; } - priv->disposed = TRUE; - - g_free (priv->hw_address); - g_free (priv->bsid); + if (priv->bsid) { + g_free (priv->bsid); + priv->bsid = NULL; + } 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); } Index: NetworkManager-0.9.4.0/libnm-glib/nm-device.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-device.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-device.c @@ -60,7 +60,6 @@ G_DEFINE_TYPE_WITH_CODE (NMDevice, nm_de #define NM_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE, NMDevicePrivate)) typedef struct { - gboolean disposed; DBusGProxy *proxy; char *iface; @@ -265,26 +264,13 @@ dispose (GObject *object) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (object); - if (priv->disposed) { - G_OBJECT_CLASS (nm_device_parent_class)->dispose (object); - return; - } - - priv->disposed = TRUE; - - 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_clear_object (&priv->proxy); + g_clear_object (&priv->ip4_config); + g_clear_object (&priv->dhcp4_config); + g_clear_object (&priv->ip6_config); + g_clear_object (&priv->dhcp6_config); + g_clear_object (&priv->client); + g_clear_object (&priv->active_connection); G_OBJECT_CLASS (nm_device_parent_class)->dispose (object); } Index: NetworkManager-0.9.4.0/libnm-glib/nm-object.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-object.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-object.c @@ -78,7 +78,7 @@ typedef struct { GSList *notify_props; guint32 notify_id; - gboolean inited, disposed; + gboolean inited; GSList *reload_results; guint reload_remaining; @@ -194,13 +194,6 @@ dispose (GObject *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) { g_source_remove (priv->notify_id); priv->notify_id = 0; @@ -208,12 +201,18 @@ dispose (GObject *object) g_slist_foreach (priv->notify_props, (GFunc) g_free, NULL); g_slist_free (priv->notify_props); + priv->notify_props = NULL; g_slist_foreach (priv->property_interfaces, (GFunc) g_free, NULL); g_slist_free (priv->property_interfaces); + priv->property_interfaces = NULL; - g_object_unref (priv->properties_proxy); - dbus_g_connection_unref (priv->connection); + g_clear_object (&priv->properties_proxy); + + if (priv->connection) { + dbus_g_connection_unref (priv->connection); + priv->connection = NULL; + } G_OBJECT_CLASS (nm_object_parent_class)->dispose (object); } Index: NetworkManager-0.9.4.0/libnm-glib/nm-remote-connection.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-remote-connection.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-remote-connection.c @@ -72,7 +72,6 @@ typedef struct { GSList *calls; gboolean visible; - gboolean disposed; } 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); NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (object); - if (!priv->disposed) { - priv->disposed = TRUE; + while (g_slist_length (priv->calls)) + remote_call_complete (self, priv->calls->data); - while (g_slist_length (priv->calls)) - remote_call_complete (self, priv->calls->data); + g_clear_object (&priv->proxy); - g_object_unref (priv->proxy); + if (priv->bus) { dbus_g_connection_unref (priv->bus); + priv->bus = NULL; } G_OBJECT_CLASS (nm_remote_connection_parent_class)->dispose (object); Index: NetworkManager-0.9.4.0/libnm-glib/nm-remote-settings.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-remote-settings.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-remote-settings.c @@ -61,8 +61,6 @@ typedef struct { DBusGProxy *dbus_proxy; guint fetch_id; - - gboolean disposed; } NMRemoteSettingsPrivate; enum { @@ -1007,29 +1005,35 @@ dispose (GObject *object) NMRemoteSettings *self = NM_REMOTE_SETTINGS (object); NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self); - if (priv->disposed) - return; - - priv->disposed = TRUE; - - if (priv->fetch_id) + if (priv->fetch_id) { g_source_remove (priv->fetch_id); + priv->fetch_id = 0; + } while (g_slist_length (priv->add_list)) add_connection_info_dispose (self, (AddConnectionInfo *) priv->add_list->data); - if (priv->connections) + if (priv->connections) { g_hash_table_destroy (priv->connections); + priv->connections = NULL; + } - if (priv->pending) + if (priv->pending) { g_hash_table_destroy (priv->pending); + priv->pending = NULL; + } g_free (priv->hostname); + priv->hostname = NULL; - g_object_unref (priv->dbus_proxy); - g_object_unref (priv->proxy); - g_object_unref (priv->props_proxy); - dbus_g_connection_unref (priv->bus); + g_clear_object (&priv->dbus_proxy); + g_clear_object (&priv->proxy); + g_clear_object (&priv->props_proxy); + + if (priv->bus) { + dbus_g_connection_unref (priv->bus); + priv->bus = NULL; + } G_OBJECT_CLASS (nm_remote_settings_parent_class)->dispose (object); } Index: NetworkManager-0.9.4.0/libnm-glib/nm-secret-agent.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-secret-agent.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-secret-agent.c @@ -79,8 +79,6 @@ typedef struct { gboolean auto_register; gboolean suppress_auto; gboolean auto_register_id; - - gboolean disposed; } NMSecretAgentPrivate; enum { @@ -878,29 +876,28 @@ dispose (GObject *object) NMSecretAgent *self = NM_SECRET_AGENT (object); NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self); - if (!priv->disposed) { - priv->disposed = TRUE; - - if (priv->registered) - nm_secret_agent_unregister (self); - - if (priv->auto_register_id) - g_source_remove (priv->auto_register_id); + if (priv->registered) + nm_secret_agent_unregister (self); - g_free (priv->identifier); - g_free (priv->nm_owner); + if (priv->auto_register_id) { + g_source_remove (priv->auto_register_id); + priv->auto_register_id = 0; + } - while (priv->pending_gets) - get_secrets_info_finalize (self, priv->pending_gets->data); + g_free (priv->identifier); + priv->identifier = NULL; + g_free (priv->nm_owner); + priv->nm_owner = NULL; - if (priv->dbus_proxy) - g_object_unref (priv->dbus_proxy); + while (priv->pending_gets) + get_secrets_info_finalize (self, priv->pending_gets->data); - if (priv->manager_proxy) - g_object_unref (priv->manager_proxy); + g_clear_object (&priv->dbus_proxy); + g_clear_object (&priv->manager_proxy); - if (priv->bus) - dbus_g_connection_unref (priv->bus); + if (priv->bus) { + dbus_g_connection_unref (priv->bus); + priv->bus = NULL; } G_OBJECT_CLASS (nm_secret_agent_parent_class)->dispose (object); Index: NetworkManager-0.9.4.0/libnm-glib/nm-vpn-plugin.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-vpn-plugin.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-vpn-plugin.c @@ -63,9 +63,6 @@ typedef struct { DBusGConnection *connection; char *dbus_service_name; - /* GObject-y stuff */ - gboolean disposed; - /* Temporary stuff */ guint connect_timer; guint quit_timer; @@ -590,15 +587,10 @@ dispose (GObject *object) NMVPNServiceState state; GError *err = NULL; - if (priv->disposed) { - G_OBJECT_CLASS (nm_vpn_plugin_parent_class)->dispose (object); - return; - } - - priv->disposed = TRUE; - - if (priv->fail_stop_id) + if (priv->fail_stop_id) { g_source_remove (priv->fail_stop_id); + priv->fail_stop_id = 0; + } state = nm_vpn_plugin_get_state (plugin); Index: NetworkManager-0.9.4.0/libnm-glib/nm-wimax-nsp.c =================================================================== --- NetworkManager-0.9.4.0.orig/libnm-glib/nm-wimax-nsp.c +++ NetworkManager-0.9.4.0/libnm-glib/nm-wimax-nsp.c @@ -37,7 +37,6 @@ G_DEFINE_TYPE (NMWimaxNsp, nm_wimax_nsp, #define NM_WIMAX_NSP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_WIMAX_NSP, NMWimaxNspPrivate)) typedef struct { - gboolean disposed; DBusGProxy *proxy; char *name; @@ -217,14 +216,7 @@ dispose (GObject *object) { NMWimaxNspPrivate *priv = NM_WIMAX_NSP_GET_PRIVATE (object); - if (priv->disposed) { - G_OBJECT_CLASS (nm_wimax_nsp_parent_class)->dispose (object); - return; - } - - priv->disposed = TRUE; - - g_object_unref (priv->proxy); + g_clear_object (&priv->proxy); G_OBJECT_CLASS (nm_wimax_nsp_parent_class)->dispose (object); }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor