[gnome-packagekit] Check the GpkDbusTask object only replies once to each session request in order to hunt a bug
- From: Richard Hughes <rhughes src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-packagekit] Check the GpkDbusTask object only replies once to each session request in order to hunt a bug
- Date: Tue, 8 Dec 2009 14:19:37 +0000 (UTC)
commit 75ca1f5d94cd9de92c1c69381a2e83ea01a4e0e3
Author: Richard Hughes <richard hughsie com>
Date: Tue Dec 8 14:05:44 2009 +0000
Check the GpkDbusTask object only replies once to each session request in order to hunt a bug
src/gpk-dbus-task.c | 251 +++++++++++++++++++++++++++++++++++----------------
1 files changed, 171 insertions(+), 80 deletions(-)
---
diff --git a/src/gpk-dbus-task.c b/src/gpk-dbus-task.c
index 2faa2f2..2f40d1e 100644
--- a/src/gpk-dbus-task.c
+++ b/src/gpk-dbus-task.c
@@ -166,6 +166,49 @@ gpk_dbus_task_set_timestamp (GpkDbusTask *dtask, guint32 timestamp)
static void gpk_dbus_task_install_package_ids (GpkDbusTask *dtask);
/**
+ * gpk_dbus_task_dbus_return_error:
+ **/
+static void
+gpk_dbus_task_dbus_return_error (GpkDbusTask *dtask, const GError *error)
+{
+ g_return_if_fail (error != NULL);
+
+ /* already sent or never setup */
+ if (dtask->priv->context == NULL) {
+ egg_error ("context does not exist, cannot return: %s", error->message);
+ goto out;
+ }
+
+ /* send error */
+ egg_debug ("sending async return error in response to %p: %s", dtask->priv->context, error->message);
+ dbus_g_method_return_error (dtask->priv->context, error);
+
+out:
+ /* set context NULL just in case we try to repeat */
+ dtask->priv->context = NULL;
+}
+
+/**
+ * gpk_dbus_task_dbus_return_value:
+ **/
+static void
+gpk_dbus_task_dbus_return_value (GpkDbusTask *dtask, gboolean ret)
+{
+ /* already sent or never setup */
+ if (dtask->priv->context == NULL) {
+ egg_error ("context does not exist, cannot return %i", ret);
+ goto out;
+ }
+
+ /* send error */
+ egg_debug ("sending async return in response to %p: %i", dtask->priv->context, ret);
+ dbus_g_method_return (dtask->priv->context, ret);
+out:
+ /* set context NULL just in case we try to repeat */
+ dtask->priv->context = NULL;
+}
+
+/**
* gpk_dbus_task_chooser_event_cb:
**/
static void
@@ -178,7 +221,8 @@ gpk_dbus_task_chooser_event_cb (GpkHelperChooser *helper_chooser, GtkResponseTyp
/* failed */
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_CANCELLED, "did not choose anything to install");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
if (dtask->priv->show_warning) {
gpk_modal_dialog_setup (dtask->priv->dialog, GPK_MODAL_DIALOG_PAGE_WARNING, 0);
@@ -346,8 +390,9 @@ gpk_dbus_task_install_packages_cb (PkTask *task, GAsyncResult *res, GpkDbusTask
/* TRANSLATORS: error: failed to install, detailed error follows */
gpk_dbus_task_error_msg (dtask, _("Failed to install package"), error);
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "%s", error->message);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
g_error_free (error);
+ g_error_free (error_dbus);
goto out;
}
@@ -356,14 +401,14 @@ gpk_dbus_task_install_packages_cb (PkTask *task, GAsyncResult *res, GpkDbusTask
if (error_code != NULL) {
egg_warning ("failed to install package: %s, %s", pk_error_enum_to_text (pk_error_get_code (error_code)), pk_error_get_details (error_code));
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "%s", pk_error_get_details (error_code));
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
gpk_dbus_task_handle_error (dtask, error_code);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
/* we're done */
- egg_debug ("doing async return");
- dbus_g_method_return (dtask->priv->context, TRUE);
+ gpk_dbus_task_dbus_return_value (dtask, TRUE);
out:
if (error_code != NULL)
g_object_unref (error_code);
@@ -481,8 +526,9 @@ gpk_dbus_task_install_files_cb (PkTask *task, GAsyncResult *res, GpkDbusTask *dt
title = ngettext ("Failed to install file", "Failed to install files", length);
gpk_dbus_task_error_msg (dtask, title, error);
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "%s", error->message);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
g_error_free (error);
+ g_error_free (error_dbus);
goto out;
}
@@ -492,7 +538,8 @@ gpk_dbus_task_install_files_cb (PkTask *task, GAsyncResult *res, GpkDbusTask *dt
egg_warning ("failed to install file: %s, %s", pk_error_enum_to_text (pk_error_get_code (error_code)), pk_error_get_details (error_code));
gpk_dbus_task_handle_error (dtask, error_code);
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "%s", error->message);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
out:
@@ -686,7 +733,7 @@ gpk_dbus_task_is_installed_resolve_cb (PkClient *client, GAsyncResult *res, GpkD
results = pk_client_generic_finish (client, res, &error);
if (results == NULL) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to resolve: %s", error->message);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
egg_warning ("failed to resolve: %s", error->message);
g_error_free (error);
goto out;
@@ -697,15 +744,15 @@ gpk_dbus_task_is_installed_resolve_cb (PkClient *client, GAsyncResult *res, GpkD
if (error_code != NULL) {
egg_warning ("failed to resolve: %s, %s", pk_error_enum_to_text (pk_error_get_code (error_code)), pk_error_get_details (error_code));
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to resolve: %s", pk_error_get_details (error_code));
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
/* get results */
array = pk_results_get_package_array (results);
ret = (array->len > 0);
- egg_debug ("doing async return");
- dbus_g_method_return (dtask->priv->context, ret);
+ gpk_dbus_task_dbus_return_value (dtask, ret);
out:
if (error_code != NULL)
g_object_unref (error_code);
@@ -751,9 +798,10 @@ gpk_dbus_task_search_file_search_file_cb (PkClient *client, GAsyncResult *res, G
results = pk_client_generic_finish (client, res, &error);
if (results == NULL) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to search file: %s", error->message);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
egg_warning ("failed to resolve: %s", error->message);
g_error_free (error);
+ g_error_free (error_dbus);
goto out;
}
@@ -762,7 +810,8 @@ gpk_dbus_task_search_file_search_file_cb (PkClient *client, GAsyncResult *res, G
if (error_code != NULL) {
egg_warning ("failed to resolve: %s, %s", pk_error_enum_to_text (pk_error_get_code (error_code)), pk_error_get_details (error_code));
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to search file: %s", pk_error_get_details (error_code));
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -771,7 +820,8 @@ gpk_dbus_task_search_file_search_file_cb (PkClient *client, GAsyncResult *res, G
if (array->len == 0) {
egg_warning ("no packages");
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to find any packages");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -783,8 +833,12 @@ gpk_dbus_task_search_file_search_file_cb (PkClient *client, GAsyncResult *res, G
NULL);
split = pk_package_id_split (package_id);
- egg_debug ("doing async return");
+ /* send error */
+ egg_debug ("sending async return in response to %p", dtask->priv->context);
dbus_g_method_return (dtask->priv->context, (info == PK_INFO_ENUM_INSTALLED), split[PK_PACKAGE_ID_NAME]);
+
+ /* set context NULL just in case we try to repeat */
+ dtask->priv->context = NULL;
out:
g_free (package_id);
g_strfreev (split);
@@ -842,7 +896,10 @@ gpk_dbus_task_install_package_files (GpkDbusTask *dtask, gchar **files_rel)
if (dtask->priv->show_confirm_search) {
ret = gpk_dbus_task_install_package_files_verify (dtask, array, &error);
if (!ret) {
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to verify files: %s", error->message);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error);
+ g_error_free (error_dbus);
goto out;
}
}
@@ -865,8 +922,6 @@ gpk_dbus_task_install_package_files (GpkDbusTask *dtask, gchar **files_rel)
/* wait for async reply */
out:
g_ptr_array_unref (array);
- if (error != NULL)
- g_error_free (error);
}
/**
@@ -894,18 +949,18 @@ gpk_dbus_task_install_package_names_resolve_cb (PkTask *task, GAsyncResult *res,
results = pk_task_generic_finish (task, res, &error);
if (results == NULL) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to resolve: %s", error->message);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
- egg_warning ("failed to resolve: %s", error->message);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
g_error_free (error);
+ g_error_free (error_dbus);
goto out;
}
/* check error code */
error_code = pk_results_get_error_code (results);
if (error_code != NULL) {
- egg_warning ("failed to resolve: %s, %s", pk_error_enum_to_text (pk_error_get_code (error_code)), pk_error_get_details (error_code));
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to resolve: %s", pk_error_get_details (error_code));
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -935,7 +990,8 @@ gpk_dbus_task_install_package_names_resolve_cb (PkTask *task, GAsyncResult *res,
g_free (title);
}
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_NO_PACKAGES_FOUND, "no package found");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -968,7 +1024,8 @@ gpk_dbus_task_install_package_names_resolve_cb (PkTask *task, GAsyncResult *res,
gpk_modal_dialog_run (dtask->priv->dialog);
}
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_FAILED, "package already found");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -984,7 +1041,8 @@ gpk_dbus_task_install_package_names_resolve_cb (PkTask *task, GAsyncResult *res,
gpk_modal_dialog_run (dtask->priv->dialog);
}
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "incorrect response from search");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1070,7 +1128,8 @@ gpk_dbus_task_install_package_names (GpkDbusTask *dtask, gchar **packages)
g_free (message);
if (!ret) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_CANCELLED, "did not agree to search");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1119,18 +1178,18 @@ gpk_dbus_task_install_provide_files_search_file_cb (PkClient *client, GAsyncResu
results = pk_client_generic_finish (client, res, &error);
if (results == NULL) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to resolve: %s", error->message);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
- egg_warning ("failed to resolve: %s", error->message);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
g_error_free (error);
+ g_error_free (error_dbus);
goto out;
}
/* check error code */
error_code = pk_results_get_error_code (results);
if (error_code != NULL) {
- egg_warning ("failed to resolve: %s, %s", pk_error_enum_to_text (pk_error_get_code (error_code)), pk_error_get_details (error_code));
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to resolve: %s", pk_error_get_details (error_code));
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1160,7 +1219,8 @@ gpk_dbus_task_install_provide_files_search_file_cb (PkClient *client, GAsyncResu
g_free (info_url);
}
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_NO_PACKAGES_FOUND, "no files found");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1197,7 +1257,8 @@ gpk_dbus_task_install_provide_files_search_file_cb (PkClient *client, GAsyncResu
g_strfreev (split);
}
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_FAILED, "already provided");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1282,7 +1343,8 @@ gpk_dbus_task_install_provide_files (GpkDbusTask *dtask, gchar **full_paths)
g_free (message);
if (!ret) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_CANCELLED, "did not agree to search");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1417,18 +1479,18 @@ gpk_dbus_task_codec_what_provides_cb (PkClient *client, GAsyncResult *res, GpkDb
results = pk_client_generic_finish (client, res, &error);
if (results == NULL) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to resolve: %s", error->message);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
- egg_warning ("failed to resolve: %s", error->message);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
g_error_free (error);
+ g_error_free (error_dbus);
goto out;
}
/* check error code */
error_code = pk_results_get_error_code (results);
if (error_code != NULL) {
- egg_warning ("failed to resolve: %s, %s", pk_error_enum_to_text (pk_error_get_code (error_code)), pk_error_get_details (error_code));
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to resolve: %s", pk_error_get_details (error_code));
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1459,7 +1521,8 @@ gpk_dbus_task_codec_what_provides_cb (PkClient *client, GAsyncResult *res, GpkDb
g_free (info_url);
}
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_NO_PACKAGES_FOUND, "failed to find codec");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1486,7 +1549,8 @@ gpk_dbus_task_codec_what_provides_cb (PkClient *client, GAsyncResult *res, GpkDb
if (button != GTK_RESPONSE_OK) {
gpk_modal_dialog_close (dtask->priv->dialog);
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_CANCELLED, "did not agree to download");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1531,7 +1595,8 @@ gpk_dbus_task_install_gstreamer_resources (GpkDbusTask *dtask, gchar **codec_nam
ret = gconf_client_get_bool (dtask->priv->gconf_client, GPK_CONF_ENABLE_CODEC_HELPER, NULL);
if (!ret) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_FORBIDDEN, "not enabled in GConf : %s", GPK_CONF_ENABLE_CODEC_HELPER);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1545,7 +1610,8 @@ gpk_dbus_task_install_gstreamer_resources (GpkDbusTask *dtask, gchar **codec_nam
ret = gpk_dbus_task_install_gstreamer_resources_confirm (dtask, codec_names);
if (!ret) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_CANCELLED, "did not agree to search");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1612,19 +1678,19 @@ gpk_dbus_task_mime_what_provides_cb (PkClient *client, GAsyncResult *res, GpkDbu
if (results == NULL) {
/* TRANSLATORS: we failed to find the package, this shouldn't happen */
gpk_dbus_task_error_msg (dtask, _("Failed to search for provides"), error);
- error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to resolve: %s", error->message);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
- egg_warning ("failed to resolve: %s", error->message);
+ error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to search for provides: %s", error->message);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
g_error_free (error);
+ g_error_free (error_dbus);
goto out;
}
/* check error code */
error_code = pk_results_get_error_code (results);
if (error_code != NULL) {
- egg_warning ("failed to resolve: %s, %s", pk_error_enum_to_text (pk_error_get_code (error_code)), pk_error_get_details (error_code));
- error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to resolve: %s", pk_error_get_details (error_code));
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to search for provides: %s", pk_error_get_details (error_code));
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1654,15 +1720,15 @@ gpk_dbus_task_mime_what_provides_cb (PkClient *client, GAsyncResult *res, GpkDbu
g_free (info_url);
}
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_NO_PACKAGES_FOUND, "nothing was found to handle mime type");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
/* populate a chooser */
gpk_helper_chooser_show (dtask->priv->helper_chooser, array);
- egg_debug ("doing async return");
- dbus_g_method_return (dtask->priv->context, TRUE);
+ gpk_dbus_task_dbus_return_value (dtask, TRUE);
out:
if (error_code != NULL)
g_object_unref (error_code);
@@ -1698,7 +1764,8 @@ gpk_dbus_task_install_mime_types (GpkDbusTask *dtask, gchar **mime_types)
ret = gconf_client_get_bool (dtask->priv->gconf_client, GPK_CONF_ENABLE_MIME_TYPE_HELPER, NULL);
if (!ret) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_FORBIDDEN, "not enabled in GConf : %s", GPK_CONF_ENABLE_MIME_TYPE_HELPER);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1732,7 +1799,8 @@ gpk_dbus_task_install_mime_types (GpkDbusTask *dtask, gchar **mime_types)
ret = gpk_dbus_task_confirm_action (dtask, text, message, _("Search"));
if (!ret) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_CANCELLED, "did not agree to search");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1862,9 +1930,9 @@ gpk_dbus_task_fontconfig_what_provides_cb (PkClient *client, GAsyncResult *res,
/* TRANSLATORS: we failed to find the package, this shouldn't happen */
// gpk_dbus_task_error_msg (dtask, _("Failed to search for provides"), error);
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to search for provides: %s", error->message);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
- egg_warning ("failed to resolve: %s", error->message);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
g_error_free (error);
+ g_error_free (error_dbus);
goto out;
}
@@ -1874,7 +1942,8 @@ gpk_dbus_task_fontconfig_what_provides_cb (PkClient *client, GAsyncResult *res,
/* TRANSLATORS: we failed to find the package, this shouldn't happen */
// gpk_dbus_task_error_msg (dtask, _("Failed to search for provides"), pk_error_get_details (error_code));
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to search for provides: %s", pk_error_get_details (error_code));
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1905,7 +1974,8 @@ gpk_dbus_task_fontconfig_what_provides_cb (PkClient *client, GAsyncResult *res,
g_free (info_url);
}
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_NO_PACKAGES_FOUND, "failed to find font");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -1931,7 +2001,8 @@ gpk_dbus_task_fontconfig_what_provides_cb (PkClient *client, GAsyncResult *res,
if (button != GTK_RESPONSE_OK) {
gpk_modal_dialog_close (dtask->priv->dialog);
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_CANCELLED, "did not agree to download");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -2012,7 +2083,8 @@ gpk_dbus_task_install_fontconfig_resources (GpkDbusTask *dtask, gchar **fonts)
ret = gpk_dbus_task_install_check_exec_ignored (dtask);
if (!ret) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_FORBIDDEN, "skipping ignored program: %s", dtask->priv->exec);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -2023,7 +2095,8 @@ gpk_dbus_task_install_fontconfig_resources (GpkDbusTask *dtask, gchar **fonts)
ret = gconf_client_get_bool (dtask->priv->gconf_client, GPK_CONF_ENABLE_FONT_HELPER, NULL);
if (!ret) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_FORBIDDEN, "not enabled in GConf : %s", GPK_CONF_ENABLE_FONT_HELPER);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -2038,14 +2111,16 @@ gpk_dbus_task_install_fontconfig_resources (GpkDbusTask *dtask, gchar **fonts)
/* correct prefix */
if (!g_str_has_prefix (fonts[i], ":lang=")) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "not recognised prefix: '%s'", fonts[i]);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
/* no lang code */
size = strlen (fonts[i]);
if (size < 7 || size > 20) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "lang tag malformed: '%s'", fonts[i]);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
}
@@ -2094,7 +2169,8 @@ gpk_dbus_task_install_fontconfig_resources (GpkDbusTask *dtask, gchar **fonts)
g_free (message);
if (!ret) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_CANCELLED, "did not agree to search");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -2144,8 +2220,9 @@ gpk_dbus_task_catalog_lookup_cb (GObject *object, GAsyncResult *res, GpkDbusTask
gpk_modal_dialog_run (dtask->priv->dialog);
}
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_FAILED, "failed to parse catalog: %s", error->message);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
g_error_free (error);
+ g_error_free (error_dbus);
goto out;
}
@@ -2161,7 +2238,8 @@ gpk_dbus_task_catalog_lookup_cb (GObject *object, GAsyncResult *res, GpkDbusTask
gpk_modal_dialog_run (dtask->priv->dialog);
}
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_FAILED, "No packages need to be installed");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -2186,7 +2264,8 @@ gpk_dbus_task_catalog_lookup_cb (GObject *object, GAsyncResult *res, GpkDbusTask
/* did we click no or exit the window? */
if (button != GTK_RESPONSE_OK) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_CANCELLED, "Action was cancelled");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -2215,25 +2294,25 @@ gpk_dbus_task_remove_packages_cb (PkTask *task, GAsyncResult *res, GpkDbusTask *
if (results == NULL) {
/* TRANSLATORS: error: failed to remove, detailed error follows */
gpk_dbus_task_error_msg (dtask, _("Failed to remove package"), error);
- error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "%s", error->message);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to remove package: %s", error->message);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
g_error_free (error);
+ g_error_free (error_dbus);
goto out;
}
/* check error code */
error_code = pk_results_get_error_code (results);
if (error_code != NULL) {
- egg_warning ("failed to remove package: %s, %s", pk_error_enum_to_text (pk_error_get_code (error_code)), pk_error_get_details (error_code));
- error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "%s", pk_error_get_details (error_code));
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to remove package: %s", pk_error_get_details (error_code));
gpk_dbus_task_handle_error (dtask, error_code);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
/* we're done */
- egg_debug ("doing async return");
- dbus_g_method_return (dtask->priv->context, TRUE);
+ gpk_dbus_task_dbus_return_value (dtask, TRUE);
out:
if (error_code != NULL)
g_object_unref (error_code);
@@ -2275,19 +2354,20 @@ gpk_dbus_task_remove_package_by_file_search_file_cb (PkClient *client, GAsyncRes
/* get the results */
results = pk_client_generic_finish (client, res, &error);
if (results == NULL) {
- error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to resolve: %s", error->message);
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to search by file: %s", error->message);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
egg_warning ("failed to resolve: %s", error->message);
g_error_free (error);
+ g_error_free (error_dbus);
goto out;
}
/* check error code */
error_code = pk_results_get_error_code (results);
if (error_code != NULL) {
- egg_warning ("failed to resolve: %s, %s", pk_error_enum_to_text (pk_error_get_code (error_code)), pk_error_get_details (error_code));
- error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to resolve: %s", pk_error_get_details (error_code));
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "failed to search by file: %s", pk_error_get_details (error_code));
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -2308,7 +2388,8 @@ gpk_dbus_task_remove_package_by_file_search_file_cb (PkClient *client, GAsyncRes
gpk_modal_dialog_run (dtask->priv->dialog);
}
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_NO_PACKAGES_FOUND, "no packages found for this file");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -2392,7 +2473,8 @@ gpk_dbus_task_remove_package_by_file (GpkDbusTask *dtask, gchar **full_paths)
g_free (message);
if (!ret) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_CANCELLED, "did not agree to search");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -2449,7 +2531,8 @@ gpk_dbus_task_install_catalogs (GpkDbusTask *dtask, gchar **filenames)
/* did we click no or exit the window? */
if (button != GTK_RESPONSE_OK) {
error_dbus = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_CANCELLED, "did not agree to install");
- dbus_g_method_return_error (dtask->priv->context, error_dbus);
+ gpk_dbus_task_dbus_return_error (dtask, error_dbus);
+ g_error_free (error_dbus);
goto out;
}
@@ -2690,12 +2773,20 @@ static void
gpk_dbus_task_finalize (GObject *object)
{
GpkDbusTask *dtask;
+ GError *error;
g_return_if_fail (GPK_IS_DBUS_TASK (object));
dtask = GPK_DBUS_TASK (object);
g_return_if_fail (dtask->priv != NULL);
+ /* no reply was sent */
+ if (dtask->priv->context != NULL) {
+ error = g_error_new (GPK_DBUS_ERROR, GPK_DBUS_ERROR_INTERNAL_ERROR, "context never was returned");
+ gpk_dbus_task_dbus_return_error (dtask, error);
+ g_error_free (error);
+ }
+
g_free (dtask->priv->parent_title);
g_free (dtask->priv->parent_icon_name);
g_free (dtask->priv->exec);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]