]> git.0d.be Git - empathy.git/commitdiff
Fix: do not close the call channel if stream-engine is not yet started (Alban Crequy)
authorXavier Claessens <xclaesse@src.gnome.org>
Tue, 11 Mar 2008 08:19:53 +0000 (08:19 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Tue, 11 Mar 2008 08:19:53 +0000 (08:19 +0000)
svn path=/trunk/; revision=730

libempathy/empathy-tp-call.c

index 681d03d8542431bb036c5f47b927819189a2b5c6..594eb6d453544bb33049b53110df0774dc8e584f 100644 (file)
@@ -83,6 +83,7 @@ enum
 };
 
 static guint signals[LAST_SIGNAL];
 };
 
 static guint signals[LAST_SIGNAL];
+static gchar *stream_engine_owner = NULL;
 
 G_DEFINE_TYPE (EmpathyTpCall, empathy_tp_call, G_TYPE_OBJECT)
 
 
 G_DEFINE_TYPE (EmpathyTpCall, empathy_tp_call, G_TYPE_OBJECT)
 
@@ -523,11 +524,20 @@ tp_call_watch_name_owner_cb (TpDBusDaemon *daemon,
                              const gchar *new_owner,
                              gpointer call)
 {
                              const gchar *new_owner,
                              gpointer call)
 {
-  if (G_STR_EMPTY (new_owner))
+  /* G_STR_EMPTY(new_owner) means either stream-engine has not started yet or
+   * has crashed. We want to close the channel if stream-engine has crashed.
+   * */
+  empathy_debug (DEBUG_DOMAIN, "Watch SE: name='%s' old_owner='%s' new_owner='%s'",
+                 name, stream_engine_owner ? stream_engine_owner : "none",
+                 new_owner ? new_owner : "none");
+  if (! G_STR_EMPTY(stream_engine_owner) &&
+      G_STR_EMPTY (new_owner))
     {
       empathy_debug (DEBUG_DOMAIN, "Stream engine falled off the bus");
       empathy_tp_call_close_channel (call);
     }
     {
       empathy_debug (DEBUG_DOMAIN, "Stream engine falled off the bus");
       empathy_tp_call_close_channel (call);
     }
+  g_free(stream_engine_owner);
+  stream_engine_owner = g_strdup(new_owner);
 }
 
 static void
 }
 
 static void
@@ -654,6 +664,8 @@ tp_call_finalize (GObject *object)
       g_object_unref (priv->dbus_daemon);
     }
 
       g_object_unref (priv->dbus_daemon);
     }
 
+  g_free(stream_engine_owner);
+
   (G_OBJECT_CLASS (empathy_tp_call_parent_class)->finalize) (object);
 }
 
   (G_OBJECT_CLASS (empathy_tp_call_parent_class)->finalize) (object);
 }