[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