Comment 44 for bug 408530

Revision history for this message
Guillaume Desmottes (cassidy) wrote :

I spent lot of time tracking this issue and I'm now pretty sure it's because of Ubuntu's libindicate patch. As I said on the upstream bug [1], this crash is due to a leak of EmpathyChat object.

I never managed to reproduce the leak in my Empathy (upstream version) and so finally decided to take a look at the libindicate patch. And then saw this:

 cb_data = g_slice_new0 (NotificationData);
 cb_data->chat = g_object_ref (chat);
 cb_data->window = window;

 sender = empathy_message_get_sender (message);
 body = empathy_message_get_body (message);

 indicator = g_hash_table_lookup (priv->indicators, chat);
 if (indicator) {
  empathy_indicator_update (indicator, body);
 } else {
  indicator = empathy_indicator_manager_create_indicator (priv->indicator_manager,
   sender, body);
  g_signal_connect (indicator, "activate",
      G_CALLBACK (chat_window_indicator_activate_cb), cb_data);
  g_hash_table_insert (priv->indicators, chat, indicator);
 }

It's pretty obvious that this code will leak an EmpathyChat reference if:
a) indicator is not NULL (as cb_data is not even used)
b) for any reason the "activate" signal is not fired.

This is not the first time that Ubuntu's libindicate patch introduces crashes in Empathy or offer a shitty user experience (see bug #440865) for example. For the record, this patch has been proposed upstream and rejected because of its poor quality, see [2] for my list of comments (I didn't review the latest version so hopefully most of them have been fixed since).

I'm very disappointed because Empathy developpers asked many time to Ubuntu to either improve the quality of their patch or to drop it from the package. My biggest concern is that now lof of Ubuntu users have a bad image of Empathy because of this which is not fair regarding all the hard work done by the Empathy team...

[1] https://bugzilla.gnome.org/show_bug.cgi?id=593086#c15
[2] https://bugzilla.gnome.org/show_bug.cgi?id=574744#c20