]> git.0d.be Git - empathy.git/commitdiff
Handle the EmpathyIndividualWidget disappearing during an async details call
authorPhilip Withnall <philip.withnall@collabora.co.uk>
Thu, 2 Sep 2010 16:28:38 +0000 (17:28 +0100)
committerPhilip Withnall <philip.withnall@collabora.co.uk>
Fri, 3 Sep 2010 11:03:38 +0000 (12:03 +0100)
The EmpathyIndividualWidget may be destroyed between starting and finishing
an async call to get contact details. This patch prevents the finishing
callback from accessing private data which may have been freed.

libempathy-gtk/empathy-individual-widget.c

index 08a18d5ff4947ac608508b9b993d38af45b041b3..36cea8a5ee72e8b3299b90d201371d55ff374660 100644 (file)
@@ -350,15 +350,18 @@ details_feature_prepared_cb (TpConnection *connection,
     DetailsData *data)
 {
   EmpathyIndividualWidget *self = data->widget;
-  EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
+  EmpathyIndividualWidgetPriv *priv = NULL;
 
-  if (tp_proxy_prepare_finish (connection, res, NULL) == FALSE)
+  if (tp_proxy_prepare_finish (connection, res, NULL) == FALSE || self == NULL)
     {
-      gtk_widget_hide (priv->vbox_details);
+      if (self != NULL)
+        gtk_widget_hide (GET_PRIV (self)->vbox_details);
       details_data_free (data);
       return;
     }
 
+  priv = GET_PRIV (self);
+
   /* Request the Individual's info */
   gtk_widget_show (priv->vbox_details);
   gtk_widget_show (priv->hbox_details_requested);