[evolution-data-server] Bug 723260 - Use a strong reference to client in EBook/CalClientView



commit 57df21826b938d8cffeddb34c51038c0a2aa53ec
Author: Milan Crha <mcrha redhat com>
Date:   Wed Apr 8 15:58:59 2015 +0200

    Bug 723260 - Use a strong reference to client in EBook/CalClientView

 addressbook/libebook/e-book-client-view.c |   18 +++++++++++-------
 calendar/libecal/e-cal-client-view.c      |   18 +++++++++++-------
 2 files changed, 22 insertions(+), 14 deletions(-)
---
diff --git a/addressbook/libebook/e-book-client-view.c b/addressbook/libebook/e-book-client-view.c
index 10a5078..0393617 100644
--- a/addressbook/libebook/e-book-client-view.c
+++ b/addressbook/libebook/e-book-client-view.c
@@ -49,7 +49,7 @@
 typedef struct _SignalClosure SignalClosure;
 
 struct _EBookClientViewPrivate {
-       GWeakRef client;
+       EBookClient *client;
        GDBusProxy *dbus_proxy;
        GDBusConnection *connection;
        gchar *object_path;
@@ -672,8 +672,9 @@ book_client_view_set_client (EBookClientView *client_view,
                              EBookClient *client)
 {
        g_return_if_fail (E_IS_BOOK_CLIENT (client));
+       g_return_if_fail (client_view->priv->client == NULL);
 
-       g_weak_ref_set (&client_view->priv->client, client);
+       client_view->priv->client = g_object_ref (client);
 }
 
 static void
@@ -783,7 +784,7 @@ book_client_view_dispose (GObject *object)
 
        priv = E_BOOK_CLIENT_VIEW_GET_PRIVATE (object);
 
-       g_weak_ref_set (&priv->client, NULL);
+       g_clear_object (&priv->client);
 
        if (priv->connection != NULL) {
                g_object_unref (priv->connection);
@@ -840,7 +841,7 @@ book_client_view_finalize (GObject *object)
        g_free (priv->object_path);
 
        g_mutex_clear (&priv->main_context_lock);
-       g_weak_ref_clear (&priv->client);
+       g_clear_object (&priv->client);
 
        /* Chain up to parent's finalize() method. */
        G_OBJECT_CLASS (e_book_client_view_parent_class)->finalize (object);
@@ -859,7 +860,7 @@ book_client_view_initable_init (GInitable *initable,
 
        priv = E_BOOK_CLIENT_VIEW_GET_PRIVATE (initable);
 
-       book_client = g_weak_ref_get (&priv->client);
+       book_client = priv->client ? g_object_ref (priv->client) : NULL;
        if (book_client == NULL) {
                g_set_error (
                        error, E_CLIENT_ERROR,
@@ -1054,7 +1055,7 @@ e_book_client_view_init (EBookClientView *client_view)
        client_view->priv = E_BOOK_CLIENT_VIEW_GET_PRIVATE (client_view);
 
        g_mutex_init (&client_view->priv->main_context_lock);
-       g_weak_ref_init (&client_view->priv->client, NULL);
+       client_view->priv->client = NULL;
 }
 
 /**
@@ -1075,7 +1076,10 @@ e_book_client_view_ref_client (EBookClientView *client_view)
 {
        g_return_val_if_fail (E_IS_BOOK_CLIENT_VIEW (client_view), NULL);
 
-       return g_weak_ref_get (&client_view->priv->client);
+       if (!client_view->priv->client)
+               return NULL;
+
+       return g_object_ref (client_view->priv->client);
 }
 
 /**
diff --git a/calendar/libecal/e-cal-client-view.c b/calendar/libecal/e-cal-client-view.c
index be18c4a..00ab084 100644
--- a/calendar/libecal/e-cal-client-view.c
+++ b/calendar/libecal/e-cal-client-view.c
@@ -49,7 +49,7 @@
 typedef struct _SignalClosure SignalClosure;
 
 struct _ECalClientViewPrivate {
-       GWeakRef client;
+       ECalClient *client;
        GDBusProxy *dbus_proxy;
        GDBusConnection *connection;
        gchar *object_path;
@@ -509,8 +509,9 @@ cal_client_view_set_client (ECalClientView *client_view,
                             ECalClient *client)
 {
        g_return_if_fail (E_IS_CAL_CLIENT (client));
+       g_return_if_fail (client_view->priv->client == NULL);
 
-       g_weak_ref_set (&client_view->priv->client, client);
+       client_view->priv->client = g_object_ref (client);
 }
 
 static void
@@ -601,7 +602,7 @@ cal_client_view_dispose (GObject *object)
 
        priv = E_CAL_CLIENT_VIEW_GET_PRIVATE (object);
 
-       g_weak_ref_set (&priv->client, NULL);
+       g_clear_object (&priv->client);
 
        if (priv->connection != NULL) {
                g_object_unref (priv->connection);
@@ -653,7 +654,7 @@ cal_client_view_finalize (GObject *object)
        g_free (priv->object_path);
 
        g_mutex_clear (&priv->main_context_lock);
-       g_weak_ref_clear (&priv->client);
+       g_clear_object (&priv->client);
 
        /* Chain up to parent's finalize() method. */
        G_OBJECT_CLASS (e_cal_client_view_parent_class)->finalize (object);
@@ -672,7 +673,7 @@ cal_client_view_initable_init (GInitable *initable,
 
        priv = E_CAL_CLIENT_VIEW_GET_PRIVATE (initable);
 
-       cal_client = g_weak_ref_get (&priv->client);
+       cal_client = priv->client ? g_object_ref (priv->client) : NULL;
        if (cal_client == NULL) {
                g_set_error (
                        error, E_CLIENT_ERROR,
@@ -877,7 +878,7 @@ e_cal_client_view_init (ECalClientView *client_view)
        client_view->priv = E_CAL_CLIENT_VIEW_GET_PRIVATE (client_view);
 
        g_mutex_init (&client_view->priv->main_context_lock);
-       g_weak_ref_init (&client_view->priv->client, NULL);
+       client_view->priv->client = NULL;
 }
 
 /**
@@ -898,7 +899,10 @@ e_cal_client_view_ref_client (ECalClientView *client_view)
 {
        g_return_val_if_fail (E_IS_CAL_CLIENT_VIEW (client_view), NULL);
 
-       return g_weak_ref_get (&client_view->priv->client);
+       if (!client_view->priv->client)
+               return NULL;
+
+       return g_object_ref (client_view->priv->client);
 }
 
 /**


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]