[Telepathy-commits] [telepathy-mission-control/master] Proper error propagation.

Alberto Mardegan alberto.mardegan at nokia.com
Fri Feb 6 05:13:43 PST 2009


---
 src/mcd-account-requests.c |   16 +++++++++-------
 1 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/mcd-account-requests.c b/src/mcd-account-requests.c
index e675a6e..e8ace26 100644
--- a/src/mcd-account-requests.c
+++ b/src/mcd-account-requests.c
@@ -145,12 +145,13 @@ on_channel_status_changed (McdChannel *channel, McdChannelStatus status,
 static McdChannel *
 create_request (McdAccount *account, GHashTable *properties,
                 guint64 user_time, const gchar *preferred_handler,
-                gboolean use_existing)
+                gboolean use_existing, GError **error)
 {
     McdChannel *channel;
-    GError *error = NULL;
     GHashTable *props;
 
+    g_return_val_if_fail (error != NULL, NULL);
+
     /* We MUST deep-copy the hash-table, as we don't know how dbus-glib will
      * free it */
     props = _mcd_deepcopy_asv (properties);
@@ -164,14 +165,15 @@ create_request (McdAccount *account, GHashTable *properties,
     g_signal_connect_after (channel, "status-changed",
                             G_CALLBACK (on_channel_status_changed), account);
 
-    _mcd_account_online_request (account, online_request_cb, channel, &error);
-    if (error)
+    _mcd_account_online_request (account, online_request_cb, channel, error);
+    if (*error)
     {
         g_warning ("%s: _mcd_account_online_request: %s", G_STRFUNC,
-                   error->message);
-        _mcd_channel_set_error (channel, error);
+                   (*error)->message);
+        _mcd_channel_set_error (channel, g_error_copy (*error));
         /* no unref here, as this will invoke our handler which will
          * unreference the channel */
+        channel = NULL;
     }
     else
     {
@@ -198,7 +200,7 @@ account_request_common (McdAccount *account, GHashTable *properties,
     McdDispatcher *dispatcher;
 
     channel = create_request (account, properties, user_time,
-                              preferred_handler, use_existing);
+                              preferred_handler, use_existing, &error);
     if (error)
     {
         dbus_g_method_return_error (context, error);
-- 
1.5.6.5




More information about the telepathy-commits mailing list