[Xfce4-commits] <parole:master> Make sure to unref the dbus connection at the end.

Ali Abdallah noreply at xfce.org
Mon Nov 30 11:22:04 CET 2009


Updating branch refs/heads/master
         to 2ead12bf126875a0f476ca4298c8baef9dc70af2 (commit)
       from cf27874d136f656264d8431a75fce0d85021c4fb (commit)

commit 2ead12bf126875a0f476ca4298c8baef9dc70af2
Author: Ali Abdallah <aliov at xfce.org>
Date:   Mon Nov 30 11:19:47 2009 +0100

    Make sure to unref the dbus connection at the end.

 browser-plugin/media-plugin/parole-plugin-player.c |   12 +++++-
 dbus/parole-dbus.c                                 |   43 +++++++++++++++++---
 src/parole-medialist.c                             |    7 +++-
 src/parole-player.c                                |    9 ++++-
 4 files changed, 61 insertions(+), 10 deletions(-)

diff --git a/browser-plugin/media-plugin/parole-plugin-player.c b/browser-plugin/media-plugin/parole-plugin-player.c
index aed5d3c..183cdf3 100644
--- a/browser-plugin/media-plugin/parole-plugin-player.c
+++ b/browser-plugin/media-plugin/parole-plugin-player.c
@@ -63,6 +63,7 @@ static GThread *idle_thread = NULL;
 
 struct ParolePluginPlayerPrivate
 {
+    DBusGConnection *bus;
     ParoleGst    *gst;
     GtkWidget    *window;
     GtkWidget    *plug;
@@ -235,7 +236,10 @@ parole_plugin_player_play_clicked_cb (ParolePluginPlayer *player)
     else if ( player->priv->state == PAROLE_MEDIA_STATE_PAUSED )
 	parole_gst_resume (player->priv->gst);
     else if ( player->priv->finished )
-	parole_plugin_player_play (player);
+    {
+	player->priv->reload = TRUE;
+	parole_gst_stop (PAROLE_GST (player->priv->gst));
+    }
 }
 
 static void
@@ -804,6 +808,8 @@ parole_plugin_player_init (ParolePluginPlayer *player)
     
     player->priv = PAROLE_PLUGIN_PLAYER_GET_PRIVATE (player);
     
+    player->priv->bus = parole_g_session_bus_get ();
+    
     player->priv->gst  = NULL;
     player->priv->saver = parole_screen_saver_new ();
     player->priv->plug = NULL;
@@ -888,6 +894,8 @@ parole_plugin_player_finalize (GObject *object)
 
     g_debug ("Finalize...");
 
+    dbus_g_connection_unref (player->priv->bus);
+
     g_object_unref (player->priv->saver);
     
     if ( player->priv->url )
@@ -982,7 +990,7 @@ parole_plugin_player_dbus_class_init (ParolePluginPlayerClass *klass)
 static void
 parole_plugin_player_dbus_init (ParolePluginPlayer *player)
 {
-    dbus_g_connection_register_g_object (parole_g_session_bus_get (),
+    dbus_g_connection_register_g_object (player->priv->bus,
                                          "/org/Parole/Media/Plugin",
                                          G_OBJECT (player));
 }
diff --git a/dbus/parole-dbus.c b/dbus/parole-dbus.c
index 8312422..38a23f7 100644
--- a/dbus/parole-dbus.c
+++ b/dbus/parole-dbus.c
@@ -33,6 +33,12 @@
 
 #include "parole-dbus.h"
 
+static void
+proxy_destroy_cb (DBusGConnection *bus)
+{
+    dbus_g_connection_unref (bus);
+}
+
 static DBusConnection *
 parole_session_bus_get (void)
 {
@@ -40,12 +46,17 @@ parole_session_bus_get (void)
 }
 
 DBusGConnection *
-parole_g_session_bus_get	(void)
+parole_g_session_bus_get (void)
 {
-    static DBusGConnection *bus = NULL;
+    static gboolean session_bus_connected = FALSE;
+    DBusGConnection *bus;
     GError *error = NULL;
     
-    if ( bus == NULL )
+    if ( G_LIKELY (session_bus_connected) )
+    {
+	bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
+    }
+    else
     {
 	bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
     
@@ -53,7 +64,9 @@ parole_g_session_bus_get	(void)
 	{
 	    g_error ("%s", error->message);
 	}
+	session_bus_connected = TRUE;
     }
+
     return bus;
 }
 
@@ -73,17 +86,25 @@ parole_get_proxy (const gchar *path, const gchar *iface)
     if ( !proxy )
 	g_error ("Unable to create proxy for %s", PAROLE_DBUS_NAME);
 	
+    g_signal_connect_swapped (proxy, "destroy",
+			      G_CALLBACK (proxy_destroy_cb), bus);
+    
     return proxy;
 }
 
 gboolean	parole_dbus_name_has_owner		(const gchar *name)
 {
+    DBusConnection *bus;
     DBusError error;
     gboolean ret;
     
+    bus = parole_session_bus_get ();
+    
     dbus_error_init (&error);
     
-    ret = dbus_bus_name_has_owner (parole_session_bus_get (), name, &error);
+    ret = dbus_bus_name_has_owner (bus, name, &error);
+    
+    dbus_connection_unref (bus);
     
     if ( dbus_error_is_set (&error) )
     {
@@ -96,17 +117,22 @@ gboolean	parole_dbus_name_has_owner		(const gchar *name)
 
 gboolean	parole_dbus_register_name		(const gchar *name)
 {
+    DBusConnection *bus;
     DBusError error;
     int ret;
     
+    bus = parole_session_bus_get ();
+    
     dbus_error_init (&error);
     
     ret =
-        dbus_bus_request_name (parole_session_bus_get (),
+        dbus_bus_request_name (bus,
                                name,
                                DBUS_NAME_FLAG_ALLOW_REPLACEMENT,
                                &error);
         
+    dbus_connection_unref (bus);
+    
     if ( dbus_error_is_set (&error) )
     {
         g_warning ("Error: %s\n", error.message);
@@ -119,15 +145,20 @@ gboolean	parole_dbus_register_name		(const gchar *name)
 
 gboolean	parole_dbus_release_name		(const gchar *name)
 {
+    DBusConnection *bus;
     DBusError error;
     int ret;
     
+    bus = parole_session_bus_get ();
+    
     dbus_error_init (&error);
     
     ret =
-        dbus_bus_release_name (parole_session_bus_get (),
+        dbus_bus_release_name (bus,
                                name,
                                &error);
+
+    dbus_connection_unref (bus);
     
     if ( dbus_error_is_set (&error) )
     {
diff --git a/src/parole-medialist.c b/src/parole-medialist.c
index eeafeed..c4ec814 100644
--- a/src/parole-medialist.c
+++ b/src/parole-medialist.c
@@ -151,6 +151,7 @@ void		parole_media_list_save_playlist_cb     (GtkButton *button,
 
 struct ParoleMediaListPrivate
 {
+    DBusGConnection     *bus;
     GtkWidget 	  	*view;
     GtkWidget		*box;
     GtkListStore	*store;
@@ -934,6 +935,8 @@ parole_media_list_finalize (GObject *object)
     ParoleMediaList *list;
 
     list = PAROLE_MEDIA_LIST (object);
+    
+    dbus_g_connection_unref (list->priv->bus);
 
     G_OBJECT_CLASS (parole_media_list_parent_class)->finalize (object);
 }
@@ -1028,6 +1031,8 @@ parole_media_list_init (ParoleMediaList *list)
     
     list->priv = PAROLE_MEDIA_LIST_GET_PRIVATE (list);
     
+    list->priv->bus = parole_g_session_bus_get ();
+    
     builder = parole_builder_new_from_string (playlist_ui, playlist_ui_length);
     
     list->priv->view = GTK_WIDGET (gtk_builder_get_object (builder, "media-list"));
@@ -1349,7 +1354,7 @@ parole_media_list_dbus_class_init (ParoleMediaListClass *klass)
 static void
 parole_media_list_dbus_init (ParoleMediaList *list)
 {
-    dbus_g_connection_register_g_object (parole_g_session_bus_get (),
+    dbus_g_connection_register_g_object (list->priv->bus,
 					 PAROLE_DBUS_PLAYLIST_PATH,
 					 G_OBJECT (list));
 }
diff --git a/src/parole-player.c b/src/parole-player.c
index 6338fae..6d5bd73 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -194,6 +194,7 @@ static GtkTargetEntry target_entry[] =
 
 struct ParolePlayerPrivate
 {
+    DBusGConnection     *bus;
     ParoleMediaList	*list;
     ParoleStatusbar     *status;
     ParoleDisc          *disc;
@@ -1335,6 +1336,9 @@ parole_player_finalize (GObject *object)
     player = PAROLE_PLAYER (object);
 
     TRACE ("start");
+    
+    dbus_g_connection_unref (player->priv->bus);
+    
     g_object_unref (player->priv->video_filter);
     g_object_unref (player->priv->status);
     g_object_unref (player->priv->disc);
@@ -1665,6 +1669,9 @@ parole_player_init (ParolePlayer *player)
     gboolean repeat, shuffle;
     
     player->priv = PAROLE_PLAYER_GET_PRIVATE (player);
+    
+    player->priv->bus = parole_g_session_bus_get ();
+    
     player->priv->video_filter = parole_get_supported_video_filter ();
     g_object_ref_sink (player->priv->video_filter);
     
@@ -1913,7 +1920,7 @@ parole_player_dbus_class_init (ParolePlayerClass *klass)
 static void
 parole_player_dbus_init (ParolePlayer *player)
 {
-    dbus_g_connection_register_g_object (parole_g_session_bus_get (),
+    dbus_g_connection_register_g_object (player->priv->bus,
 					 PAROLE_DBUS_PATH,
 					 G_OBJECT (player));
 }



More information about the Xfce4-commits mailing list