diff options
author | Niels De Graef <nielsdegraef@gmail.com> | 2021-01-12 22:19:43 +0000 |
---|---|---|
committer | Niels De Graef <nielsdegraef@gmail.com> | 2021-01-12 22:19:43 +0000 |
commit | abd46ef6ca57ebba6ae78361fd095fbc2b42a77c (patch) | |
tree | a145d5c2821b270e5e14a81792ebfafe481ee8b5 | |
parent | 1d645eb64503baec7ebd07cac2d468161227646d (diff) | |
parent | 9aa308b47a8c6cf34fe286e468090d7d79d25e3d (diff) | |
download | gcr-abd46ef6ca57ebba6ae78361fd095fbc2b42a77c.tar.gz |
Merge branch 'wip/nielsdg/initial-gtask' into 'master'
Get rid of most GSimpleAsyncResult uages
See merge request GNOME/gcr!29
-rw-r--r-- | .gitlab-ci.yml | 18 | ||||
-rw-r--r-- | gck/gck-object-cache.c | 53 | ||||
-rw-r--r-- | gck/gck-slot.c | 32 | ||||
-rw-r--r-- | gcr/console-interaction.c | 55 | ||||
-rw-r--r-- | gcr/gcr-certificate-chain.c | 31 | ||||
-rw-r--r-- | gcr/gcr-certificate-request.c | 72 | ||||
-rw-r--r-- | gcr/gcr-gnupg-collection.c | 75 | ||||
-rw-r--r-- | gcr/gcr-gnupg-importer.c | 37 | ||||
-rw-r--r-- | gcr/gcr-library.c | 52 | ||||
-rw-r--r-- | gcr/gcr-memory-icon.c | 15 | ||||
-rw-r--r-- | gcr/gcr-pkcs11-certificate.c | 66 | ||||
-rw-r--r-- | gcr/gcr-pkcs11-importer.c | 166 | ||||
-rw-r--r-- | gcr/gcr-subject-public-key.c | 37 | ||||
-rw-r--r-- | gcr/gcr-trust.c | 223 | ||||
-rw-r--r-- | ui/frob-import-button.c | 12 | ||||
-rw-r--r-- | ui/gcr-dialog-util.c | 59 | ||||
-rw-r--r-- | ui/gcr-pkcs11-import-interaction.c | 34 |
17 files changed, 456 insertions, 581 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3d56cad..db8f059 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -42,6 +42,12 @@ fedora:asan: - meson _build -Dsanitize=address - eval `dbus-launch --sh-syntax` - meson test -C _build + artifacts: + name: "gcr-asan-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}" + when: always + paths: + - "_build/config.h" + - "_build/meson-logs" fedora:ubsan: image: fedora:latest @@ -55,6 +61,12 @@ fedora:ubsan: - meson _build -Dsanitize=undefined - eval `dbus-launch --sh-syntax` - meson test -C _build + artifacts: + name: "gcr-ubsan-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}" + when: always + paths: + - "_build/config.h" + - "_build/meson-logs" fedora:coverage: image: fedora:latest @@ -74,6 +86,12 @@ fedora:coverage: name: "gcr-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}" paths: - _build/meson-logs/coveragereport/ + artifacts: + name: "gcr-coverage-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}" + when: always + paths: + - "_build/config.h" + - "_build/meson-logs" pages: stage: deploy diff --git a/gck/gck-object-cache.c b/gck/gck-object-cache.c index e6f93e7..4db51b3 100644 --- a/gck/gck-object-cache.c +++ b/gck/gck-object-cache.c @@ -209,7 +209,7 @@ on_cache_object_get (GObject *source, GAsyncResult *result, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); + GTask *task = G_TASK (user_data); GckAttributes *attrs; GError *error = NULL; @@ -217,12 +217,12 @@ on_cache_object_get (GObject *source, if (error == NULL) { gck_object_cache_fill (GCK_OBJECT_CACHE (source), attrs); gck_attributes_unref (attrs); + g_task_return_boolean (task, TRUE); } else { - g_simple_async_result_take_error (res, error); + g_task_return_error (task, g_steal_pointer (&error)); } - g_simple_async_result_complete (res); - g_object_unref (res); + g_clear_object (&task); } /** @@ -248,7 +248,7 @@ gck_object_cache_update_async (GckObjectCache *object, gpointer user_data) { GckObjectCacheIface *iface; - GSimpleAsyncResult *res; + GTask *task; g_return_if_fail (GCK_IS_OBJECT_CACHE (object)); g_return_if_fail (attr_types != NULL || n_attr_types == 0); @@ -267,13 +267,13 @@ gck_object_cache_update_async (GckObjectCache *object, } } - res = g_simple_async_result_new (G_OBJECT (object), callback, user_data, - gck_object_cache_update_async); + task = g_task_new (object, cancellable, callback, user_data); + g_task_set_source_tag (task, gck_object_cache_update_async); gck_object_get_async (GCK_OBJECT (object), attr_types, n_attr_types, - cancellable, on_cache_object_get, g_object_ref (res)); + cancellable, on_cache_object_get, g_steal_pointer (&task)); - g_object_unref (res); + g_clear_object (&task); } /** @@ -293,14 +293,10 @@ gck_object_cache_update_finish (GckObjectCache *object, GError **error) { g_return_val_if_fail (GCK_IS_OBJECT_CACHE (object), FALSE); - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (object), - gck_object_cache_update_async), FALSE); + g_return_val_if_fail (g_task_is_valid (result, object), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) - return FALSE; - - return TRUE; + return g_task_propagate_boolean (G_TASK (result), error); } static gboolean @@ -404,26 +400,27 @@ gck_object_cache_lookup_async (GckObject *object, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *res; - GckAttributes *attrs; - GckObjectCache *cache; - gboolean have; - g_return_if_fail (GCK_IS_OBJECT (object)); g_return_if_fail (attr_types != NULL || n_attr_types == 0); g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); if (GCK_IS_OBJECT_CACHE (object)) { + GckObjectCache *cache; + GckAttributes *attrs; + gboolean have; + cache = GCK_OBJECT_CACHE (object); attrs = gck_object_cache_get_attributes (cache); have = check_have_attributes (attrs, attr_types, n_attr_types); gck_attributes_unref (attrs); if (have) { - res = g_simple_async_result_new (G_OBJECT (cache), callback, user_data, - gck_object_cache_lookup_async); - g_simple_async_result_complete_in_idle (res); - g_object_unref (res); + GTask *task; + + task = g_task_new (cache, cancellable, callback, user_data); + g_task_set_source_tag (task, gck_object_cache_lookup_async); + g_task_return_boolean (task, TRUE); + g_clear_object (&task); } else { gck_object_cache_update_async (cache, attr_types, n_attr_types, cancellable, callback, user_data); @@ -457,13 +454,11 @@ gck_object_cache_lookup_finish (GckObject *object, if (GCK_IS_OBJECT_CACHE (object)) { cache = GCK_OBJECT_CACHE (object); - if (!g_simple_async_result_is_valid (result, G_OBJECT (object), - gck_object_cache_lookup_async)) + if (!g_task_is_valid (result, object)) if (!gck_object_cache_update_finish (cache, result, error)) return NULL; return gck_object_cache_get_attributes (cache); - } else { - - return gck_object_get_finish (object, result, error); } + + return gck_object_get_finish (object, result, error); } diff --git a/gck/gck-slot.c b/gck/gck-slot.c index f42c3ee..435fe61 100644 --- a/gck/gck-slot.c +++ b/gck/gck-slot.c @@ -1037,18 +1037,17 @@ on_open_session_complete (GObject *source, GAsyncResult *result, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); + GTask *task = G_TASK (user_data); GError *error = NULL; GObject *session; session = g_async_initable_new_finish (G_ASYNC_INITABLE (source), result, &error); if (session != NULL) - g_simple_async_result_set_op_res_gpointer (res, session, g_object_unref); + g_task_return_pointer (task, session, g_object_unref); else - g_simple_async_result_take_error (res, error); + g_task_return_error (task, g_steal_pointer (&error)); - g_simple_async_result_complete (res); - g_object_unref (res); + g_clear_object (&task); } /** @@ -1058,7 +1057,7 @@ on_open_session_complete (GObject *source, * @pkcs11_flags: Additional raw PKCS\#11 flags. * @app_data: Application data for notification callback. * @notify: PKCS\#11 notification callback. - * @cancellable: Optional cancellation object, or %NULL. + * @cancellable: (nullable): Optional cancellation object, or %NULL. * @callback: Called when the operation completes. * @user_data: Data to pass to the callback. * @@ -1077,24 +1076,24 @@ gck_slot_open_session_full_async (GckSlot *self, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *res; + GTask *task; g_return_if_fail (GCK_IS_SLOT (self)); g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); - res = g_simple_async_result_new (G_OBJECT (self), callback, user_data, - gck_slot_open_session_full_async); + task = g_task_new (self, cancellable, callback, user_data); + g_task_set_source_tag (task, gck_slot_open_session_full_async); g_async_initable_new_async (GCK_TYPE_SESSION, G_PRIORITY_DEFAULT, cancellable, on_open_session_complete, - g_object_ref (res), + g_steal_pointer (&task), "options", options, "slot", self, "opening-flags", pkcs11_flags, "app-data", app_data, NULL); - g_object_unref (res); + g_clear_object (&task); } /** @@ -1111,18 +1110,11 @@ gck_slot_open_session_full_async (GckSlot *self, GckSession * gck_slot_open_session_finish (GckSlot *self, GAsyncResult *result, GError **error) { - GSimpleAsyncResult *res; - g_return_val_if_fail (GCK_IS_SLOT (self), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self), - gck_slot_open_session_full_async), NULL); - - res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) - return NULL; + g_return_val_if_fail (g_task_is_valid (result, self), NULL); - return g_object_ref (g_simple_async_result_get_op_res_gpointer (res)); + return g_task_propagate_pointer (G_TASK (result), error); } /** diff --git a/gcr/console-interaction.c b/gcr/console-interaction.c index bc3b7dc..47c2cb4 100644 --- a/gcr/console-interaction.c +++ b/gcr/console-interaction.c @@ -108,46 +108,49 @@ console_interaction_ask_password (GTlsInteraction *interaction, } static void -ask_password_with_getpass (GSimpleAsyncResult *res, - GObject *object, - GCancellable *cancellable) +ask_password_with_getpass (GTask *task, + gpointer src_object, + gpointer task_data, + GCancellable *cancellable) { GTlsPassword *password; GError *error = NULL; - password = g_simple_async_result_get_op_res_gpointer (res); - console_interaction_ask_password (G_TLS_INTERACTION (object), password, - cancellable, &error); - if (error != NULL) - g_simple_async_result_take_error (res, error); + password = g_task_get_task_data (task); + console_interaction_ask_password (G_TLS_INTERACTION (src_object), password, + cancellable, &error); + if (error == NULL) + g_task_return_boolean (task, TRUE); + else + g_task_return_error (task, g_steal_pointer (&error)); } static void console_interaction_ask_password_async (GTlsInteraction *interaction, - GTlsPassword *password, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) + GTlsPassword *password, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) { - GSimpleAsyncResult *res; - - res = g_simple_async_result_new (G_OBJECT (interaction), callback, user_data, - console_interaction_ask_password); - g_simple_async_result_set_op_res_gpointer (res, g_object_ref (password), g_object_unref); - g_simple_async_result_run_in_thread (res, ask_password_with_getpass, - G_PRIORITY_DEFAULT, cancellable); - g_object_unref (res); + GTask *task; + + task = g_task_new (interaction, cancellable, callback, user_data); + g_task_set_source_tag (task, console_interaction_ask_password); + g_task_set_task_data (task, g_object_ref (password), g_object_unref); + + g_task_run_in_thread (task, ask_password_with_getpass); + g_clear_object (&task); } static GTlsInteractionResult -console_interaction_ask_password_finish (GTlsInteraction *interaction, - GAsyncResult *result, - GError **error) +console_interaction_ask_password_finish (GTlsInteraction *interaction, + GAsyncResult *result, + GError **error) { - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (interaction), - console_interaction_ask_password), G_TLS_INTERACTION_FAILED); + g_return_val_if_fail (g_task_is_valid (result, interaction), + G_TLS_INTERACTION_FAILED); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) + if (!g_task_propagate_boolean (G_TASK (result), error)) return G_TLS_INTERACTION_FAILED; return G_TLS_INTERACTION_HANDLED; diff --git a/gcr/gcr-certificate-chain.c b/gcr/gcr-certificate-chain.c index 1eb1af2..1793869 100644 --- a/gcr/gcr-certificate-chain.c +++ b/gcr/gcr-certificate-chain.c @@ -372,19 +372,21 @@ perform_build_chain (GcrCertificateChainPrivate *pv, GCancellable *cancellable, } static void -thread_build_chain (GSimpleAsyncResult *result, GObject *object, +thread_build_chain (GTask *task, gpointer src_object, gpointer task_data, GCancellable *cancellable) { GcrCertificateChainPrivate *pv; GError *error = NULL; - pv = g_object_get_qdata (G_OBJECT (result), Q_OPERATION_DATA); + pv = g_object_get_qdata (G_OBJECT (task), Q_OPERATION_DATA); g_assert (pv); g_debug ("building asynchronously in another thread"); - if (!perform_build_chain (pv, cancellable, &error)) { - g_simple_async_result_set_from_error (result, error); + if (perform_build_chain (pv, cancellable, &error)) { + g_task_return_boolean (task, TRUE); + } else { + g_task_return_error (task, g_steal_pointer (&error)); g_clear_error (&error); } } @@ -784,22 +786,19 @@ gcr_certificate_chain_build_async (GcrCertificateChain *self, gpointer user_data) { GcrCertificateChainPrivate *pv; - GSimpleAsyncResult *result; - - g_return_if_fail (GCR_IS_CERTIFICATE_CHAIN (self)); + GTask *task; g_return_if_fail (GCR_IS_CERTIFICATE_CHAIN (self)); g_return_if_fail (purpose); pv = prep_chain_private_thread_safe (self->pv, purpose, peer, flags); - result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, - gcr_certificate_chain_build_async); - g_object_set_qdata_full (G_OBJECT (result), Q_OPERATION_DATA, pv, free_chain_private); + task = g_task_new (self, cancellable, callback, user_data); + g_task_set_source_tag (task, gcr_certificate_chain_build_async); + g_object_set_qdata_full (G_OBJECT (task), Q_OPERATION_DATA, pv, free_chain_private); - g_simple_async_result_run_in_thread (result, thread_build_chain, - G_PRIORITY_DEFAULT, cancellable); - g_object_unref (result); + g_task_run_in_thread (task, thread_build_chain); + g_clear_object (&task); } /** @@ -820,11 +819,9 @@ gcr_certificate_chain_build_finish (GcrCertificateChain *self, GAsyncResult *res GcrCertificateChainPrivate *pv; g_return_val_if_fail (GCR_IS_CERTIFICATE_CHAIN (self), FALSE); - g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE); - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self), - gcr_certificate_chain_build_async), FALSE); + g_return_val_if_fail (g_task_is_valid (result, self), FALSE); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) + if (!g_task_propagate_boolean (G_TASK (result), error)) return FALSE; pv = g_object_steal_qdata (G_OBJECT (result), Q_OPERATION_DATA); diff --git a/gcr/gcr-certificate-request.c b/gcr/gcr-certificate-request.c index 9a663aa..9736ce8 100644 --- a/gcr/gcr-certificate-request.c +++ b/gcr/gcr-certificate-request.c @@ -516,7 +516,6 @@ gcr_certificate_request_complete (GcrCertificateRequest *self, typedef struct { GcrCertificateRequest *request; - GCancellable *cancellable; GQuark algorithm; GNode *subject_public_key; GckMechanism mechanism; @@ -530,7 +529,6 @@ complete_closure_free (gpointer data) CompleteClosure *closure = data; egg_asn1x_destroy (closure->subject_public_key); g_clear_object (&closure->request); - g_clear_object (&closure->cancellable); g_clear_object (&closure->session); if (closure->tbs) g_bytes_unref (closure->tbs); @@ -542,8 +540,8 @@ on_certificate_request_signed (GObject *source, GAsyncResult *result, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); - CompleteClosure *closure = g_simple_async_result_get_op_res_gpointer (res); + GTask *task = G_TASK (user_data); + CompleteClosure *closure = g_task_get_task_data (task); GError *error = NULL; guchar *signature; gsize n_signature; @@ -555,12 +553,12 @@ on_certificate_request_signed (GObject *source, closure->subject_public_key, signature, n_signature); + g_task_return_boolean (task, TRUE); } else { - g_simple_async_result_take_error (res, error); + g_task_return_error (task, g_steal_pointer (&error)); } - g_simple_async_result_complete (res); - g_object_unref (res); + g_clear_object (&task); } static void @@ -568,15 +566,15 @@ on_mechanism_check (GObject *source, GAsyncResult *result, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); - CompleteClosure *closure = g_simple_async_result_get_op_res_gpointer (res); + GTask *task = G_TASK (user_data); + CompleteClosure *closure = g_task_get_task_data (task); + GCancellable *cancellable = g_task_get_cancellable (task); closure->mechanism.type = _gcr_key_mechanisms_check_finish (closure->request->private_key, result, NULL); if (closure->mechanism.type == GCK_INVALID) { - g_simple_async_result_set_error (res, GCK_ERROR, CKR_KEY_TYPE_INCONSISTENT, - _("The key cannot be used to sign the request")); - g_simple_async_result_complete (res); + g_task_return_new_error (task, GCK_ERROR, CKR_KEY_TYPE_INCONSISTENT, + _("The key cannot be used to sign the request")); } else { closure->tbs = prepare_to_be_signed (closure->request, &closure->mechanism); @@ -585,12 +583,12 @@ on_mechanism_check (GObject *source, &closure->mechanism, g_bytes_get_data (closure->tbs, NULL), g_bytes_get_size (closure->tbs), - closure->cancellable, + cancellable, on_certificate_request_signed, - g_object_ref (res)); + g_steal_pointer (&task)); } - g_object_unref (res); + g_clear_object (&task); } static void @@ -598,8 +596,9 @@ on_subject_public_key_loaded (GObject *source, GAsyncResult *result, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); - CompleteClosure *closure = g_simple_async_result_get_op_res_gpointer (res); + GTask *task = G_TASK (user_data); + CompleteClosure *closure = g_task_get_task_data (task); + GCancellable *cancellable = g_task_get_cancellable (task); const gulong *mechanisms; gsize n_mechanisms; GError *error = NULL; @@ -615,23 +614,21 @@ on_subject_public_key_loaded (GObject *source, } if (error != NULL) { - g_simple_async_result_take_error (res, error); - g_simple_async_result_complete (res); - - } else { - _gcr_key_mechanisms_check_async (closure->request->private_key, - mechanisms, n_mechanisms, CKA_SIGN, - closure->cancellable, on_mechanism_check, - g_object_ref (res)); + g_task_return_error (task, g_steal_pointer (&error)); + g_clear_object (&task); + return; } - g_object_unref (res); + _gcr_key_mechanisms_check_async (closure->request->private_key, + mechanisms, n_mechanisms, CKA_SIGN, + cancellable, on_mechanism_check, + g_steal_pointer (&task)); } /** * gcr_certificate_request_complete_async: * @self: a certificate request - * @cancellable: a cancellation object + * @cancellable: (nullable): a cancellation object * @callback: called when the operation completes * @user_data: data to pass to the callback * @@ -646,25 +643,24 @@ gcr_certificate_request_complete_async (GcrCertificateRequest *self, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *res; + GTask *task; CompleteClosure *closure; g_return_if_fail (GCR_IS_CERTIFICATE_REQUEST (self)); g_return_if_fail (cancellable == NULL || G_CANCELLABLE (cancellable)); - res = g_simple_async_result_new (G_OBJECT (self), callback, user_data, - gcr_certificate_request_complete_async); + task = g_task_new (self, cancellable, callback, user_data); + g_task_set_source_tag (task, gcr_certificate_request_complete_async); closure = g_new0 (CompleteClosure, 1); - closure->cancellable = cancellable ? g_object_ref (cancellable) : NULL; closure->session = gck_object_get_session (self->private_key); closure->request = g_object_ref (self); - g_simple_async_result_set_op_res_gpointer (res, closure, complete_closure_free); + g_task_set_task_data (task, closure, complete_closure_free); _gcr_subject_public_key_load_async (self->private_key, cancellable, on_subject_public_key_loaded, - g_object_ref (res)); + g_steal_pointer (&task)); - g_object_unref (res); + g_clear_object (&task); } /** @@ -685,13 +681,9 @@ gcr_certificate_request_complete_finish (GcrCertificateRequest *self, { g_return_val_if_fail (GCR_IS_CERTIFICATE_REQUEST (self), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self), - gcr_certificate_request_complete_async), FALSE); + g_return_val_if_fail (g_task_is_valid (result, self), FALSE); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) - return FALSE; - - return TRUE; + return g_task_propagate_boolean (G_TASK (result), error); } /** diff --git a/gcr/gcr-gnupg-collection.c b/gcr/gcr-gnupg-collection.c index c47ead8..d2f90bf 100644 --- a/gcr/gcr-gnupg-collection.c +++ b/gcr/gcr-gnupg-collection.c @@ -233,7 +233,6 @@ typedef struct { GcrLoadingPhase loading_phase; /* Whether loading public or private */ GPtrArray *records; /* GcrRecord* not yet made into a key */ GcrGnupgProcess *process; /* The gnupg process itself */ - GCancellable *cancel; /* Cancellation for process */ GString *out_data; /* Pending output not yet parsed into colons */ GHashTable *difference; /* Hashset gchar *keyid -> gchar *keyid */ @@ -248,7 +247,7 @@ typedef struct { } GcrGnupgCollectionLoad; /* Forward declarations */ -static void spawn_gnupg_list_process (GcrGnupgCollectionLoad *load, GSimpleAsyncResult *res); +static void spawn_gnupg_list_process (GcrGnupgCollectionLoad *load, GTask *task); static void _gcr_gnupg_collection_load_free (gpointer data) @@ -274,9 +273,6 @@ _gcr_gnupg_collection_load_free (gpointer data) g_output_stream_close (load->outattr, NULL, NULL); g_object_unref (load->outattr); - if (load->cancel) - g_object_unref (load->cancel); - if (load->attribute_queue) { while (!g_queue_is_empty (load->attribute_queue)) _gcr_record_free (g_queue_pop_head (load->attribute_queue)); @@ -517,8 +513,8 @@ on_gnupg_process_output_data (gconstpointer buffer, gpointer user_data, GError **error) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); - GcrGnupgCollectionLoad *load = g_simple_async_result_get_op_res_gpointer (res); + GTask *task = G_TASK (user_data); + GcrGnupgCollectionLoad *load = g_task_get_task_data (task); g_string_append_len (load->out_data, buffer, count); _gcr_util_parse_lines (load->out_data, FALSE, on_line_parse_output, load); @@ -536,8 +532,8 @@ static void on_gnupg_process_status_record (GcrGnupgProcess *process, GcrRecord *record, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); - GcrGnupgCollectionLoad *load = g_simple_async_result_get_op_res_gpointer (res); + GTask *task = G_TASK (user_data); + GcrGnupgCollectionLoad *load = g_task_get_task_data (task); if (GCR_RECORD_SCHEMA_ATTRIBUTE != _gcr_record_get_schema (record)) return; @@ -556,8 +552,8 @@ on_gnupg_process_attribute_data (gconstpointer buffer, gpointer user_data, GError **error) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); - GcrGnupgCollectionLoad *load = g_simple_async_result_get_op_res_gpointer (res); + GTask *task = G_TASK (user_data); + GcrGnupgCollectionLoad *load = g_task_get_task_data (task); /* If we don't have a buffer, just claim this one */ if (!load->attribute_buf) @@ -572,18 +568,16 @@ on_gnupg_process_attribute_data (gconstpointer buffer, static void on_gnupg_process_completed (GObject *source, GAsyncResult *result, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); - GcrGnupgCollectionLoad *load = g_simple_async_result_get_op_res_gpointer (res); + GTask *task = G_TASK (user_data); + GcrGnupgCollectionLoad *load = g_task_get_task_data (task); GHashTableIter iter; GError *error = NULL; GObject *object; gpointer keyid; if (!_gcr_gnupg_process_run_finish (GCR_GNUPG_PROCESS (source), result, &error)) { - g_simple_async_result_set_from_error (res, error); - g_simple_async_result_complete (res); - g_object_unref (res); - g_clear_error (&error); + g_task_return_error (task, g_steal_pointer (&error)); + g_clear_object (&task); return; } @@ -599,8 +593,8 @@ on_gnupg_process_completed (GObject *source, GAsyncResult *result, gpointer user case GCR_LOADING_PHASE_PUBLIC: g_debug ("public load phase completed"); load->loading_phase = GCR_LOADING_PHASE_SECRET; - spawn_gnupg_list_process (load, res); - g_object_unref (res); + spawn_gnupg_list_process (load, task); + g_clear_object (&task); return; case GCR_LOADING_PHASE_SECRET: g_debug ("secret load phase completed"); @@ -623,13 +617,14 @@ on_gnupg_process_completed (GObject *source, GAsyncResult *result, gpointer user } } - g_simple_async_result_complete (res); - g_object_unref (res); + g_task_return_boolean (task, TRUE); + g_clear_object (&task); } static void -spawn_gnupg_list_process (GcrGnupgCollectionLoad *load, GSimpleAsyncResult *res) +spawn_gnupg_list_process (GcrGnupgCollectionLoad *load, GTask *task) { + GCancellable *cancellable = g_task_get_cancellable (task); GcrGnupgProcessFlags flags = 0; GPtrArray *argv; @@ -658,8 +653,8 @@ spawn_gnupg_list_process (GcrGnupgCollectionLoad *load, GSimpleAsyncResult *res) /* res is unreffed in on_gnupg_process_completed */ _gcr_gnupg_process_run_async (load->process, (const gchar**)argv->pdata, NULL, flags, - load->cancel, on_gnupg_process_completed, - g_object_ref (res)); + cancellable, on_gnupg_process_completed, + g_object_ref (task)); g_ptr_array_unref (argv); } @@ -667,7 +662,7 @@ spawn_gnupg_list_process (GcrGnupgCollectionLoad *load, GSimpleAsyncResult *res) /** * _gcr_gnupg_collection_load_async: * @self: The collection - * @cancellable: Cancellation object or %NULL + * @cancellable: (nullable): Cancellation object or %NULL * @callback: Callback to call when result is ready * @user_data: Data for callback * @@ -678,7 +673,7 @@ void _gcr_gnupg_collection_load_async (GcrGnupgCollection *self, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *res; + GTask *task; GcrGnupgCollectionLoad *load; GHashTableIter iter; gpointer keyid; @@ -687,23 +682,22 @@ _gcr_gnupg_collection_load_async (GcrGnupgCollection *self, GCancellable *cancel /* TODO: Cancellation not yet implemented */ - res = g_simple_async_result_new (G_OBJECT (self), callback, user_data, - _gcr_gnupg_collection_load_async); + task = g_task_new (self, cancellable, callback, user_data); + g_task_set_source_tag (task, _gcr_gnupg_collection_load_async); load = g_slice_new0 (GcrGnupgCollectionLoad); load->records = g_ptr_array_new_with_free_func (_gcr_record_free); load->out_data = g_string_sized_new (1024); load->collection = g_object_ref (self); - load->cancel = cancellable ? g_object_ref (cancellable) : cancellable; - load->output = _gcr_callback_output_stream_new (on_gnupg_process_output_data, res, NULL); - load->outattr = _gcr_callback_output_stream_new (on_gnupg_process_attribute_data, res, NULL); + load->output = _gcr_callback_output_stream_new (on_gnupg_process_output_data, task, NULL); + load->outattr = _gcr_callback_output_stream_new (on_gnupg_process_attribute_data, task, NULL); load->process = _gcr_gnupg_process_new (self->pv->directory, NULL); _gcr_gnupg_process_set_output_stream (load->process, load->output); _gcr_gnupg_process_set_attribute_stream (load->process, load->outattr); - load->error_sig = g_signal_connect (load->process, "error-line", G_CALLBACK (on_gnupg_process_error_line), res); - load->status_sig = g_signal_connect (load->process, "status-record", G_CALLBACK (on_gnupg_process_status_record), res); + load->error_sig = g_signal_connect (load->process, "error-line", G_CALLBACK (on_gnupg_process_error_line), task); + load->status_sig = g_signal_connect (load->process, "status-record", G_CALLBACK (on_gnupg_process_status_record), task); /* * Track all the keys we currently have, at end remove those that @@ -714,13 +708,12 @@ _gcr_gnupg_collection_load_async (GcrGnupgCollection *self, GCancellable *cancel while (g_hash_table_iter_next (&iter, &keyid, NULL)) g_hash_table_insert (load->difference, keyid, keyid); - g_simple_async_result_set_op_res_gpointer (res, load, - _gcr_gnupg_collection_load_free); + g_task_set_task_data (task, load, _gcr_gnupg_collection_load_free); load->loading_phase = GCR_LOADING_PHASE_PUBLIC; - spawn_gnupg_list_process (load, res); + spawn_gnupg_list_process (load, task); - g_object_unref (res); + g_clear_object (&task); } /** @@ -739,11 +732,7 @@ _gcr_gnupg_collection_load_finish (GcrGnupgCollection *self, GAsyncResult *resul g_return_val_if_fail (GCR_IS_GNUPG_COLLECTION (self), FALSE); g_return_val_if_fail (!error || !*error, FALSE); - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self), - _gcr_gnupg_collection_load_async), FALSE); - - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) - return FALSE; + g_return_val_if_fail (g_task_is_valid (result, self), FALSE); - return TRUE; + return g_task_propagate_boolean (G_TASK (result), error); } diff --git a/gcr/gcr-gnupg-importer.c b/gcr/gcr-gnupg-importer.c index 439a90a..79fa043 100644 --- a/gcr/gcr-gnupg-importer.c +++ b/gcr/gcr-gnupg-importer.c @@ -295,23 +295,23 @@ on_process_run_complete (GObject *source, GAsyncResult *result, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); - GcrGnupgImporter *self = GCR_GNUPG_IMPORTER (g_async_result_get_source_object (user_data)); + GTask *task = G_TASK (user_data); + GcrGnupgImporter *self = GCR_GNUPG_IMPORTER (g_task_get_source_object (task)); GError *error = NULL; if (!_gcr_gnupg_process_run_finish (GCR_GNUPG_PROCESS (source), result, &error)) { if (g_error_matches (error, G_SPAWN_ERROR, G_SPAWN_ERROR_FAILED) && self->pv->first_error) { - g_simple_async_result_set_error (res, G_SPAWN_ERROR, G_SPAWN_ERROR_FAILED, - "%s", self->pv->first_error); + g_task_return_new_error (task, G_SPAWN_ERROR, G_SPAWN_ERROR_FAILED, + "%s", self->pv->first_error); g_error_free (error); } else { - g_simple_async_result_take_error (res, error); + g_task_return_error (task, g_steal_pointer (&error)); } + } else { + g_task_return_boolean (task, TRUE); } - g_simple_async_result_complete (res); - g_object_unref (self); - g_object_unref (res); + g_clear_object (&task); } static void @@ -321,21 +321,20 @@ _gcr_gnupg_importer_import_async (GcrImporter *importer, gpointer user_data) { GcrGnupgImporter *self = GCR_GNUPG_IMPORTER (importer); - GSimpleAsyncResult *res; + GTask *task; const gchar *argv[] = { "--import", NULL }; - g_free (self->pv->first_error); - self->pv->first_error = NULL; + g_clear_pointer (&self->pv->first_error, g_free); - res = g_simple_async_result_new (G_OBJECT (importer), callback, user_data, - _gcr_gnupg_importer_import_async); + task = g_task_new (importer, cancellable, callback, user_data); + g_task_set_source_tag (task, _gcr_gnupg_importer_import_async); _gcr_gnupg_process_run_async (self->pv->process, argv, NULL, GCR_GNUPG_PROCESS_WITH_STATUS, cancellable, on_process_run_complete, - g_object_ref (res)); + g_steal_pointer (&task)); - g_object_unref (res); + g_clear_object (&task); } static gboolean @@ -343,13 +342,9 @@ _gcr_gnupg_importer_import_finish (GcrImporter *importer, GAsyncResult *result, GError **error) { - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (importer), - _gcr_gnupg_importer_import_async), FALSE); - - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) - return FALSE; + g_return_val_if_fail (g_task_is_valid (result, importer), FALSE); - return TRUE; + return g_task_propagate_boolean (G_TASK (result), error); } static void diff --git a/gcr/gcr-library.c b/gcr/gcr-library.c index bbce13f..399c7e2 100644 --- a/gcr/gcr-library.c +++ b/gcr/gcr-library.c @@ -239,38 +239,36 @@ on_initialize_registered (GObject *object, GAsyncResult *result, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); + GTask *task = G_TASK (user_data); GError *error = NULL; GList *results; results = gck_modules_initialize_registered_finish (result, &error); if (error != NULL) { g_debug ("failed %s", error->message); - g_simple_async_result_take_error (res, error); - - } else { - - G_LOCK (modules); - - if (!initialized_modules) { - all_modules = g_list_concat(all_modules, results); - results = NULL; - initialized_modules = TRUE; - } + g_task_return_error (task, g_steal_pointer (&error)); + g_clear_object (&task); + return; + } - G_UNLOCK (modules); + G_LOCK (modules); + if (!initialized_modules) { + all_modules = g_list_concat (all_modules, results); + results = NULL; + initialized_modules = TRUE; } + G_UNLOCK (modules); gck_list_unref_free (results); g_debug ("completed initialize of registered modules"); - g_simple_async_result_complete (res); - g_object_unref (res); + g_task_return_boolean (task, TRUE); + g_clear_object (&task); } /** * gcr_pkcs11_initialize_async: - * @cancellable: optional cancellable used to cancel the operation + * @cancellable: (nullable): optional cancellable used to cancel the operation * @callback: callback which will be called when the operation completes * @user_data: data passed to the callback * @@ -281,22 +279,24 @@ gcr_pkcs11_initialize_async (GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *res; + GTask *task; + + g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); - res = g_simple_async_result_new (NULL, callback, user_data, - gcr_pkcs11_initialize_async); + task = g_task_new (NULL, cancellable, callback, user_data); + g_task_set_source_tag (task, gcr_pkcs11_initialize_async); if (initialized_modules) { g_debug ("already initialized, no need to async"); - g_simple_async_result_complete_in_idle (res); + g_task_return_boolean (task, TRUE); } else { gck_modules_initialize_registered_async (cancellable, on_initialize_registered, - g_object_ref (res)); + g_steal_pointer (&task)); g_debug ("starting initialize of registered modules"); } - g_object_unref (res); + g_clear_object (&task); } /** @@ -313,13 +313,9 @@ gboolean gcr_pkcs11_initialize_finish (GAsyncResult *result, GError **error) { - g_return_val_if_fail (g_simple_async_result_is_valid (result, NULL, - gcr_pkcs11_initialize_async), FALSE); + g_return_val_if_fail (g_task_is_valid (result, NULL), FALSE); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) - return FALSE; - - return TRUE; + return g_task_propagate_boolean (G_TASK (result), error); } /** diff --git a/gcr/gcr-memory-icon.c b/gcr/gcr-memory-icon.c index 27edefc..40a4527 100644 --- a/gcr/gcr-memory-icon.c +++ b/gcr/gcr-memory-icon.c @@ -138,21 +138,22 @@ static void _gcr_memory_icon_load_async (GLoadableIcon *icon, int size, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *res; + GTask *task; - res = g_simple_async_result_new (G_OBJECT (icon), callback, user_data, - _gcr_memory_icon_load_async); + task = g_task_new (icon, cancellable, callback, user_data); + g_task_set_source_tag (task, _gcr_memory_icon_load_async); - g_simple_async_result_complete_in_idle (res); - g_object_unref (res); + /* We don't do anything with the task value, so just return a bogus value */ + g_task_return_pointer (task, NULL, NULL); + g_object_unref (task); } static GInputStream* _gcr_memory_icon_finish (GLoadableIcon *icon, GAsyncResult *res, char **type, GError **error) { - g_return_val_if_fail (g_simple_async_result_is_valid (res, G_OBJECT (icon), - _gcr_memory_icon_load_async), NULL); + g_return_val_if_fail (g_task_is_valid (res, icon), NULL); + return _gcr_memory_icon_load (icon, 0, type, NULL, error); } diff --git a/gcr/gcr-pkcs11-certificate.c b/gcr/gcr-pkcs11-certificate.c index ce55a18..ea87961 100644 --- a/gcr/gcr-pkcs11-certificate.c +++ b/gcr/gcr-pkcs11-certificate.c @@ -74,20 +74,6 @@ G_DEFINE_TYPE_WITH_CODE (GcrPkcs11Certificate, gcr_pkcs11_certificate, GCK_TYPE_ G_IMPLEMENT_INTERFACE (GCR_TYPE_CERTIFICATE, gcr_certificate_iface); ); -typedef struct { - GckAttributes *search; - GcrCertificate *result; -} lookup_issuer_closure; - -static void -lookup_issuer_free (gpointer data) -{ - lookup_issuer_closure *closure = data; - gck_attributes_unref (closure->search); - g_clear_object (&closure->result); - g_free (closure); -} - static GckAttributes * prepare_lookup_certificate_issuer (GcrCertificate *cert) { @@ -168,17 +154,19 @@ perform_lookup_certificate (GckAttributes *search, } static void -thread_lookup_certificate (GSimpleAsyncResult *res, GObject *object, GCancellable *cancel) +thread_lookup_certificate (GTask *task, gpointer src_object, gpointer task_data, + GCancellable *cancellable) { - lookup_issuer_closure *closure; + GckAttributes *search = (GckAttributes *) task_data; + GcrCertificate *result; GError *error = NULL; - closure = g_simple_async_result_get_op_res_gpointer (res); - closure->result = perform_lookup_certificate (closure->search, cancel, &error); - + result = perform_lookup_certificate (search, cancellable, &error); if (error != NULL) { - g_simple_async_result_set_from_error (res, error); + g_task_return_error (task, g_steal_pointer (&error)); g_clear_error (&error); + } else{ + g_task_return_pointer (task, result, g_object_unref); } } @@ -394,22 +382,21 @@ void gcr_pkcs11_certificate_lookup_issuer_async (GcrCertificate *certificate, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *async; - lookup_issuer_closure *closure; + GTask *task; + GckAttributes *search; g_return_if_fail (GCR_IS_CERTIFICATE (certificate)); - async = g_simple_async_result_new (G_OBJECT (certificate), callback, user_data, - gcr_pkcs11_certificate_lookup_issuer_async); - closure = g_new0 (lookup_issuer_closure, 1); - closure->search = prepare_lookup_certificate_issuer (certificate); - g_return_if_fail (closure->search); - g_simple_async_result_set_op_res_gpointer (async, closure, lookup_issuer_free); + task = g_task_new (certificate, cancellable, callback, user_data); + g_task_set_source_tag (task, gcr_pkcs11_certificate_lookup_issuer_async); - g_simple_async_result_run_in_thread (async, thread_lookup_certificate, - G_PRIORITY_DEFAULT, cancellable); + search = prepare_lookup_certificate_issuer (certificate); + g_return_if_fail (search); + g_task_set_task_data (task, search, gck_attributes_unref); - g_object_unref (async); + g_task_run_in_thread (task, thread_lookup_certificate); + + g_object_unref (task); } /** @@ -428,21 +415,12 @@ gcr_pkcs11_certificate_lookup_issuer_async (GcrCertificate *certificate, GCancel GcrCertificate * gcr_pkcs11_certificate_lookup_issuer_finish (GAsyncResult *result, GError **error) { - lookup_issuer_closure *closure; GObject *source; - g_return_val_if_fail (G_IS_ASYNC_RESULT (result), NULL); - - source = g_async_result_get_source_object (result); - g_return_val_if_fail (g_simple_async_result_is_valid (result, source, - gcr_pkcs11_certificate_lookup_issuer_async), NULL); - g_object_unref (source); + g_return_val_if_fail (G_IS_TASK (result), NULL); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) - return NULL; + source = g_task_get_source_object (G_TASK (result)); + g_return_val_if_fail (g_task_is_valid (result, source), NULL); - closure = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result)); - if (closure->result != NULL) - g_object_ref (closure->result); - return closure->result; + return g_task_propagate_pointer (G_TASK (result), error); } diff --git a/gcr/gcr-pkcs11-importer.c b/gcr/gcr-pkcs11-importer.c index 7a7cc3b..302eb72 100644 --- a/gcr/gcr-pkcs11-importer.c +++ b/gcr/gcr-pkcs11-importer.c @@ -62,28 +62,16 @@ struct _GcrPkcs11Importer { typedef struct { GcrPkcs11Importer *importer; - GCancellable *cancellable; gboolean prompted; gboolean async; GckBuilder *supplement; } GcrImporterData; -/* State forward declarations */ -static void state_cancelled (GSimpleAsyncResult *res, +/* frward declarations */ +static void state_cancelled (GTask *task, gboolean async); - -static void state_complete (GSimpleAsyncResult *res, - gboolean async); - -static void state_create_object (GSimpleAsyncResult *res, - gboolean async); - -static void state_supplement (GSimpleAsyncResult *res, - gboolean async); - -static void state_open_session (GSimpleAsyncResult *res, +static void state_create_object (GTask *task, gboolean async); - static void _gcr_pkcs11_importer_init_iface (GcrImporterIface *iface); G_DEFINE_TYPE_WITH_CODE (GcrPkcs11Importer, _gcr_pkcs11_importer, G_TYPE_OBJECT, @@ -97,24 +85,23 @@ gcr_importer_data_free (gpointer data) { GcrImporterData *state = data; - g_clear_object (&state->cancellable); g_clear_object (&state->importer); gck_builder_unref (state->supplement); g_free (state); } static void -next_state (GSimpleAsyncResult *res, - void (*state) (GSimpleAsyncResult *, gboolean)) +next_state (GTask *task, + void (*state) (GTask *, gboolean)) { - GcrImporterData *data = g_simple_async_result_get_op_res_gpointer (res); + GcrImporterData *data = g_task_get_task_data (task); g_assert (state); - if (g_cancellable_is_cancelled (data->cancellable)) + if (g_cancellable_is_cancelled (g_task_get_cancellable (task))) state = state_cancelled; - (state) (res, data->async); + (state) (task, data->async); } /* --------------------------------------------------------------------------------- @@ -122,25 +109,17 @@ next_state (GSimpleAsyncResult *res, */ static void -state_complete (GSimpleAsyncResult *res, - gboolean async) -{ - g_simple_async_result_complete (res); -} - -static void -state_cancelled (GSimpleAsyncResult *res, +state_cancelled (GTask *task, gboolean async) { - GcrImporterData *data = g_simple_async_result_get_op_res_gpointer (res); + GCancellable *cancellable = g_task_get_cancellable (task); GError *error = NULL; - if (data->cancellable && !g_cancellable_is_cancelled (data->cancellable)) - g_cancellable_cancel (data->cancellable); + if (cancellable && !g_cancellable_is_cancelled (cancellable)) + g_cancellable_cancel (cancellable); - g_cancellable_set_error_if_cancelled (data->cancellable, &error); - g_simple_async_result_take_error (res, error); - next_state (res, state_complete); + g_cancellable_set_error_if_cancelled (cancellable, &error); + g_task_return_error (task, g_steal_pointer (&error)); } /* --------------------------------------------------------------------------------- @@ -148,20 +127,19 @@ state_cancelled (GSimpleAsyncResult *res, */ static void -complete_create_object (GSimpleAsyncResult *res, +complete_create_object (GTask *task, GckObject *object, GError *error) { - GcrImporterData *data = g_simple_async_result_get_op_res_gpointer (res); + GcrImporterData *data = g_task_get_task_data (task); GcrPkcs11Importer *self = data->importer; if (object == NULL) { - g_simple_async_result_take_error (res, error); - next_state (res, state_complete); + g_task_return_error (task, g_steal_pointer (&error)); } else { self->objects = g_list_append (self->objects, object); - next_state (res, state_create_object); + next_state (task, state_create_object); } } @@ -170,20 +148,21 @@ on_create_object (GObject *source, GAsyncResult *result, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); + GTask *task = G_TASK (user_data); GError *error = NULL; GckObject *object; object = gck_session_create_object_finish (GCK_SESSION (source), result, &error); - complete_create_object (res, object, error); - g_object_unref (res); + complete_create_object (task, object, error); + g_clear_object (&task); } static void -state_create_object (GSimpleAsyncResult *res, +state_create_object (GTask *task, gboolean async) { - GcrImporterData *data = g_simple_async_result_get_op_res_gpointer (res); + GcrImporterData *data = g_task_get_task_data (task); + GCancellable *cancellable = g_task_get_cancellable (task); GcrPkcs11Importer *self = data->importer; GckAttributes *attrs; GckObject *object; @@ -191,7 +170,7 @@ state_create_object (GSimpleAsyncResult *res, /* No more objects */ if (g_queue_is_empty (self->queue)) { - next_state (res, state_complete); + g_task_return_boolean (task, TRUE); } else { @@ -201,12 +180,12 @@ state_create_object (GSimpleAsyncResult *res, if (async) { gck_session_create_object_async (self->session, attrs, - data->cancellable, on_create_object, - g_object_ref (res)); + cancellable, on_create_object, + g_object_ref (task)); } else { object = gck_session_create_object (self->session, attrs, - data->cancellable, &error); - complete_create_object (res, object, error); + cancellable, &error); + complete_create_object (task, object, error); } gck_attributes_unref (attrs); @@ -406,10 +385,10 @@ supplement_attributes (GcrPkcs11Importer *self, } static void -complete_supplement (GSimpleAsyncResult *res, +complete_supplement (GTask *task, GError *error) { - GcrImporterData *data = g_simple_async_result_get_op_res_gpointer (res); + GcrImporterData *data = g_task_get_task_data (task); GckAttributes *attributes; if (error == NULL) { @@ -417,10 +396,9 @@ complete_supplement (GSimpleAsyncResult *res, supplement_attributes (data->importer, attributes); gck_attributes_unref (attributes); - next_state (res, state_create_object); + next_state (task, state_create_object); } else { - g_simple_async_result_take_error (res, error); - next_state (res, state_complete); + g_task_return_error (task, g_steal_pointer (&error)); } } @@ -429,44 +407,46 @@ on_supplement_done (GObject *source, GAsyncResult *result, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); - GcrImporterData *data = g_simple_async_result_get_op_res_gpointer (res); + GTask *task = G_TASK (user_data); + GcrImporterData *data = g_task_get_task_data (task); GcrPkcs11Importer *self = data->importer; GError *error = NULL; gcr_import_interaction_supplement_finish (GCR_IMPORT_INTERACTION (self->interaction), result, &error); - complete_supplement (res, error); - g_object_unref (res); + complete_supplement (task, error); + g_clear_object (&task); } static void -state_supplement (GSimpleAsyncResult *res, +state_supplement (GTask *task, gboolean async) { - GcrImporterData *data = g_simple_async_result_get_op_res_gpointer (res); + GcrImporterData *data = g_task_get_task_data (task); + GCancellable *cancellable = g_task_get_cancellable (task); GcrPkcs11Importer *self = data->importer; GError *error = NULL; if (self->interaction == NULL || !GCR_IS_IMPORT_INTERACTION (self->interaction)) { - complete_supplement (res, NULL); + complete_supplement (task, NULL); } else if (async) { gcr_import_interaction_supplement_async (GCR_IMPORT_INTERACTION (self->interaction), - data->supplement, data->cancellable, - on_supplement_done, g_object_ref (res)); + data->supplement, cancellable, + on_supplement_done, + g_object_ref (task)); } else { gcr_import_interaction_supplement (GCR_IMPORT_INTERACTION (self->interaction), - data->supplement, data->cancellable, &error); - complete_supplement (res, error); + data->supplement, cancellable, &error); + complete_supplement (task, error); } } static void -supplement_prep (GSimpleAsyncResult *res) +supplement_prep (GTask *task) { - GcrImporterData *data = g_simple_async_result_get_op_res_gpointer (res); + GcrImporterData *data = g_task_get_task_data (task); GcrPkcs11Importer *self = data->importer; const GckAttribute *the_label = NULL; const GckAttribute *attr; @@ -503,21 +483,20 @@ supplement_prep (GSimpleAsyncResult *res) */ static void -complete_open_session (GSimpleAsyncResult *res, +complete_open_session (GTask *task, GckSession *session, GError *error) { - GcrImporterData *data = g_simple_async_result_get_op_res_gpointer (res); + GcrImporterData *data = g_task_get_task_data (task); GcrPkcs11Importer *self = data->importer; if (!session) { - g_simple_async_result_take_error (res, error); - next_state (res, state_complete); + g_task_return_error (task, g_steal_pointer (&error)); } else { g_clear_object (&self->session); self->session = session; - next_state (res, state_supplement); + next_state (task, state_supplement); } } @@ -526,20 +505,21 @@ on_open_session (GObject *source, GAsyncResult *result, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); + GTask *task = G_TASK (user_data); GError *error = NULL; GckSession *session; session = gck_session_open_finish (result, &error); - complete_open_session (res, session, error); - g_object_unref (res); + complete_open_session (task, session, error); + g_clear_object (&task); } static void -state_open_session (GSimpleAsyncResult *res, +state_open_session (GTask *task, gboolean async) { - GcrImporterData *data = g_simple_async_result_get_op_res_gpointer (res); + GcrImporterData *data = g_task_get_task_data (task); + GCancellable *cancellable = g_task_get_cancellable (task); GcrPkcs11Importer *self = data->importer; guint options = GCK_SESSION_READ_WRITE | GCK_SESSION_LOGIN_USER; GckSession *session; @@ -547,11 +527,11 @@ state_open_session (GSimpleAsyncResult *res, if (async) { gck_session_open_async (self->slot, options, self->interaction, - data->cancellable, on_open_session, g_object_ref (res)); + cancellable, on_open_session, g_object_ref (task)); } else { session = gck_session_open (self->slot, options, self->interaction, - data->cancellable, &error); - complete_open_session (res, session, error); + cancellable, &error); + complete_open_session (task, session, error); } } @@ -843,21 +823,21 @@ _gcr_pkcs11_importer_import_async (GcrImporter *importer, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *res; + GTask *task; GcrImporterData *data; - res = g_simple_async_result_new (G_OBJECT (importer), callback, user_data, - _gcr_pkcs11_importer_import_async); + task = g_task_new (importer, cancellable, callback, user_data); + g_task_set_source_tag (task, _gcr_pkcs11_importer_import_async); + data = g_new0 (GcrImporterData, 1); data->async = TRUE; data->importer = GCR_PKCS11_IMPORTER (g_object_ref (importer)); - data->cancellable = cancellable ? g_object_ref (cancellable) : NULL; - g_simple_async_result_set_op_res_gpointer (res, data, gcr_importer_data_free); + g_task_set_task_data (task, data, gcr_importer_data_free); - supplement_prep (res); + supplement_prep (task); - next_state (res, state_open_session); - g_object_unref (res); + next_state (task, state_open_session); + g_clear_object (&task); } static gboolean @@ -865,13 +845,9 @@ _gcr_pkcs11_importer_import_finish (GcrImporter *importer, GAsyncResult *result, GError **error) { - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (importer), - _gcr_pkcs11_importer_import_async), FALSE); - - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) - return FALSE; + g_return_val_if_fail (g_task_is_valid (result, importer), FALSE); - return TRUE; + return g_task_propagate_boolean (G_TASK (result), error); } static void diff --git a/gcr/gcr-subject-public-key.c b/gcr/gcr-subject-public-key.c index bc07de4..7ff78f4 100644 --- a/gcr/gcr-subject-public-key.c +++ b/gcr/gcr-subject-public-key.c @@ -510,15 +510,16 @@ load_closure_free (gpointer data) } static void -thread_key_attributes (GSimpleAsyncResult *res, - GObject *object, +thread_key_attributes (GTask *task, gpointer src_object, gpointer task_data, GCancellable *cancellable) { - LoadClosure *closure = g_simple_async_result_get_op_res_gpointer (res); + LoadClosure *closure = task_data; GError *error = NULL; - if (!load_attributes (closure->object, &closure->builder, cancellable, &error)) - g_simple_async_result_take_error (res, error); + if (load_attributes (closure->object, &closure->builder, cancellable, &error)) + g_task_return_boolean (task, TRUE); + else + g_task_return_error (task, g_steal_pointer (&error)); } void @@ -527,29 +528,28 @@ _gcr_subject_public_key_load_async (GckObject *key, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *res; + GTask *task; LoadClosure *closure; g_return_if_fail (GCK_IS_OBJECT (key)); g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); - res = g_simple_async_result_new (NULL, callback, user_data, - _gcr_subject_public_key_load_async); + task = g_task_new (NULL, cancellable, callback, user_data); + g_task_set_source_tag (task, _gcr_subject_public_key_load_async); closure = g_slice_new0 (LoadClosure); closure->object = g_object_ref (key); lookup_attributes (key, &closure->builder); - g_simple_async_result_set_op_res_gpointer (res, closure, load_closure_free); + g_task_set_task_data (task, closure, load_closure_free); if (check_attributes (&closure->builder)) { - g_simple_async_result_complete_in_idle (res); - g_object_unref (res); + g_task_return_boolean (task, TRUE); + g_clear_object (&task); return; } - g_simple_async_result_run_in_thread (res, thread_key_attributes, - G_PRIORITY_DEFAULT, cancellable); - g_object_unref (res); + g_task_run_in_thread (task, thread_key_attributes); + g_clear_object (&task); } GNode * @@ -557,19 +557,16 @@ _gcr_subject_public_key_load_finish (GAsyncResult *result, GError **error) { GckAttributes *attributes; - GSimpleAsyncResult *res; LoadClosure *closure; GNode *asn; g_return_val_if_fail (error == NULL || *error == NULL, NULL); - g_return_val_if_fail (g_simple_async_result_is_valid (result, NULL, - _gcr_subject_public_key_load_async), NULL); + g_return_val_if_fail (g_task_is_valid (result, NULL), NULL); - res = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (res, error)) + if (!g_task_propagate_boolean (G_TASK (result), error)) return NULL; - closure = g_simple_async_result_get_op_res_gpointer (res); + closure = g_task_get_task_data (G_TASK (result)); attributes = gck_attributes_ref_sink (gck_builder_end (&closure->builder)); asn = _gcr_subject_public_key_for_attributes (attributes); if (asn == NULL) { diff --git a/gcr/gcr-trust.c b/gcr/gcr-trust.c index 2a74b59..af41d02 100644 --- a/gcr/gcr-trust.c +++ b/gcr/gcr-trust.c @@ -97,19 +97,6 @@ * HELPERS */ -typedef struct { - GckAttributes *attrs; - gboolean found; -} trust_closure; - -static void -trust_closure_free (gpointer data) -{ - trust_closure *closure = data; - gck_attributes_unref (closure->attrs); - g_free (closure); -} - static void prepare_trust_attrs (GcrCertificate *certificate, CK_X_ASSERTION_TYPE type, @@ -211,18 +198,18 @@ gcr_trust_is_certificate_pinned (GcrCertificate *certificate, const gchar *purpo } static void -thread_is_certificate_pinned (GSimpleAsyncResult *result, GObject *object, GCancellable *cancel) +thread_is_certificate_pinned (GTask *task, gpointer object, + gpointer task_data, GCancellable *cancellable) { + GckAttributes *attrs = task_data; GError *error = NULL; - trust_closure *closure; - - closure = g_simple_async_result_get_op_res_gpointer (result); - closure->found = perform_is_certificate_pinned (closure->attrs, cancel, &error); + gboolean found; - if (error != NULL) { - g_simple_async_result_set_from_error (result, error); - g_clear_error (&error); - } + found = perform_is_certificate_pinned (attrs, cancellable, &error); + if (error == NULL) + g_task_return_boolean (task, found); + else + g_task_return_error (task, g_steal_pointer (&error)); } /** @@ -246,24 +233,23 @@ gcr_trust_is_certificate_pinned_async (GcrCertificate *certificate, const gchar const gchar *peer, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *async; - trust_closure *closure; + GTask *task; + GckAttributes *attrs; - g_return_if_fail (GCR_CERTIFICATE (certificate)); + g_return_if_fail (GCR_IS_CERTIFICATE (certificate)); g_return_if_fail (purpose); g_return_if_fail (peer); - async = g_simple_async_result_new (NULL, callback, user_data, - gcr_trust_is_certificate_pinned_async); - closure = g_new0 (trust_closure, 1); - closure->attrs = prepare_is_certificate_pinned (certificate, purpose, peer); - g_return_if_fail (closure->attrs); - g_simple_async_result_set_op_res_gpointer (async, closure, trust_closure_free); + task = g_task_new (NULL, cancellable, callback, user_data); + g_task_set_source_tag (task, gcr_trust_is_certificate_pinned_async); + + attrs = prepare_is_certificate_pinned (certificate, purpose, peer); + g_return_if_fail (attrs); + g_task_set_task_data (task, attrs, gck_attributes_unref); - g_simple_async_result_run_in_thread (async, thread_is_certificate_pinned, - G_PRIORITY_DEFAULT, cancellable); + g_task_run_in_thread (task, thread_is_certificate_pinned); - g_object_unref (async); + g_clear_object (&task); } /** @@ -282,19 +268,10 @@ gcr_trust_is_certificate_pinned_async (GcrCertificate *certificate, const gchar gboolean gcr_trust_is_certificate_pinned_finish (GAsyncResult *result, GError **error) { - trust_closure *closure; - - g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE); g_return_val_if_fail (!error || !*error, FALSE); + g_return_val_if_fail (g_task_is_valid (result, NULL), FALSE); - g_return_val_if_fail (g_simple_async_result_is_valid (result, NULL, - gcr_trust_is_certificate_pinned_async), FALSE); - - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) - return FALSE; - - closure = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result)); - return closure->found; + return g_task_propagate_boolean (G_TASK (result), error); } /* ---------------------------------------------------------------------------------- @@ -428,18 +405,17 @@ gcr_trust_add_pinned_certificate (GcrCertificate *certificate, const gchar *purp } static void -thread_add_pinned_certificate (GSimpleAsyncResult *result, GObject *object, GCancellable *cancel) +thread_add_pinned_certificate (GTask *task, gpointer object, + gpointer task_data, GCancellable *cancellable) { + GckAttributes *attrs = task_data; GError *error = NULL; - trust_closure *closure; - - closure = g_simple_async_result_get_op_res_gpointer (result); - perform_add_pinned_certificate (closure->attrs, cancel, &error); - if (error != NULL) { - g_simple_async_result_set_from_error (result, error); - g_clear_error (&error); - } + perform_add_pinned_certificate (attrs, cancellable, &error); + if (error == NULL) + g_task_return_boolean (task, TRUE); + else + g_task_return_error (task, g_steal_pointer (&error)); } /** @@ -467,24 +443,23 @@ gcr_trust_add_pinned_certificate_async (GcrCertificate *certificate, const gchar const gchar *peer, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *async; - trust_closure *closure; + GTask *task; + GckAttributes *attrs; g_return_if_fail (GCR_IS_CERTIFICATE (certificate)); g_return_if_fail (purpose); g_return_if_fail (peer); - async = g_simple_async_result_new (NULL, callback, user_data, - gcr_trust_add_pinned_certificate_async); - closure = g_new0 (trust_closure, 1); - closure->attrs = prepare_add_pinned_certificate (certificate, purpose, peer); - g_return_if_fail (closure->attrs); - g_simple_async_result_set_op_res_gpointer (async, closure, trust_closure_free); + task = g_task_new (NULL, cancellable, callback, user_data); + g_task_set_source_tag (task, gcr_trust_add_pinned_certificate_async); + + attrs = prepare_add_pinned_certificate (certificate, purpose, peer); + g_return_if_fail (attrs); + g_task_set_task_data (task, attrs, gck_attributes_unref); - g_simple_async_result_run_in_thread (async, thread_add_pinned_certificate, - G_PRIORITY_DEFAULT, cancellable); + g_task_run_in_thread (task, thread_add_pinned_certificate); - g_object_unref (async); + g_clear_object (&task); } /** @@ -500,16 +475,10 @@ gcr_trust_add_pinned_certificate_async (GcrCertificate *certificate, const gchar gboolean gcr_trust_add_pinned_certificate_finish (GAsyncResult *result, GError **error) { - g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE); g_return_val_if_fail (!error || !*error, FALSE); + g_return_val_if_fail (g_task_is_valid (result, NULL), FALSE); - g_return_val_if_fail (g_simple_async_result_is_valid (result, NULL, - gcr_trust_add_pinned_certificate_async), FALSE); - - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) - return FALSE; - - return TRUE; + return g_task_propagate_boolean (G_TASK (result), error); } /* ----------------------------------------------------------------------- @@ -613,18 +582,18 @@ gcr_trust_remove_pinned_certificate (GcrCertificate *certificate, const gchar *p } static void -thread_remove_pinned_certificate (GSimpleAsyncResult *result, GObject *object, GCancellable *cancel) +thread_remove_pinned_certificate (GTask *task, gpointer object, + gpointer task_data, GCancellable *cancellable) { + GckAttributes *attrs = task_data; GError *error = NULL; - trust_closure *closure; - closure = g_simple_async_result_get_op_res_gpointer (result); - perform_remove_pinned_certificate (closure->attrs, cancel, &error); + perform_remove_pinned_certificate (attrs, cancellable, &error); - if (error != NULL) { - g_simple_async_result_set_from_error (result, error); - g_clear_error (&error); - } + if (error == NULL) + g_task_return_boolean (task, TRUE); + else + g_task_return_error (task, g_steal_pointer (&error)); } /** @@ -646,28 +615,30 @@ thread_remove_pinned_certificate (GSimpleAsyncResult *result, GObject *object, G * operation. */ void -gcr_trust_remove_pinned_certificate_async (GcrCertificate *certificate, const gchar *purpose, - const gchar *peer, GCancellable *cancellable, - GAsyncReadyCallback callback, gpointer user_data) +gcr_trust_remove_pinned_certificate_async (GcrCertificate *certificate, + const gchar *purpose, + const gchar *peer, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) { - GSimpleAsyncResult *async; - trust_closure *closure; + GTask *task; + GckAttributes *attrs; g_return_if_fail (GCR_IS_CERTIFICATE (certificate)); g_return_if_fail (purpose); g_return_if_fail (peer); - async = g_simple_async_result_new (NULL, callback, user_data, - gcr_trust_remove_pinned_certificate_async); - closure = g_new0 (trust_closure, 1); - closure->attrs = prepare_remove_pinned_certificate (certificate, purpose, peer); - g_return_if_fail (closure->attrs); - g_simple_async_result_set_op_res_gpointer (async, closure, trust_closure_free); + task = g_task_new (NULL, cancellable, callback, user_data); + g_task_set_source_tag (task, gcr_trust_remove_pinned_certificate_async); + + attrs = prepare_remove_pinned_certificate (certificate, purpose, peer); + g_return_if_fail (attrs); + g_task_set_task_data (task, attrs, gck_attributes_unref); - g_simple_async_result_run_in_thread (async, thread_remove_pinned_certificate, - G_PRIORITY_DEFAULT, cancellable); + g_task_run_in_thread (task, thread_remove_pinned_certificate); - g_object_unref (async); + g_clear_object (&task); } /** @@ -683,16 +654,10 @@ gcr_trust_remove_pinned_certificate_async (GcrCertificate *certificate, const gc gboolean gcr_trust_remove_pinned_certificate_finish (GAsyncResult *result, GError **error) { - g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE); g_return_val_if_fail (!error || !*error, FALSE); + g_return_val_if_fail (g_task_is_valid (result, NULL), FALSE); - g_return_val_if_fail (g_simple_async_result_is_valid (result, NULL, - gcr_trust_remove_pinned_certificate_async), FALSE); - - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) - return FALSE; - - return TRUE; + return g_task_propagate_boolean (G_TASK (result), error); } /* ---------------------------------------------------------------------------------- @@ -777,18 +742,18 @@ gcr_trust_is_certificate_anchored (GcrCertificate *certificate, const gchar *pur } static void -thread_is_certificate_anchored (GSimpleAsyncResult *result, GObject *object, GCancellable *cancel) +thread_is_certificate_anchored (GTask *task, gpointer object, + gpointer task_data, GCancellable *cancellable) { + GckAttributes *attrs = task_data; GError *error = NULL; - trust_closure *closure; - - closure = g_simple_async_result_get_op_res_gpointer (result); - closure->found = perform_is_certificate_anchored (closure->attrs, cancel, &error); + gboolean found; - if (error != NULL) { - g_simple_async_result_set_from_error (result, error); - g_clear_error (&error); - } + found = perform_is_certificate_anchored (attrs, cancellable, &error); + if (error == NULL) + g_task_return_boolean (task, found); + else + g_task_return_error (task, g_steal_pointer (&error)); } /** @@ -811,23 +776,22 @@ gcr_trust_is_certificate_anchored_async (GcrCertificate *certificate, const gcha GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *async; - trust_closure *closure; + GTask *task; + GckAttributes *attrs; g_return_if_fail (GCR_IS_CERTIFICATE (certificate)); g_return_if_fail (purpose); - async = g_simple_async_result_new (NULL, callback, user_data, - gcr_trust_is_certificate_anchored_async); - closure = g_new0 (trust_closure, 1); - closure->attrs = prepare_is_certificate_anchored (certificate, purpose); - g_return_if_fail (closure->attrs); - g_simple_async_result_set_op_res_gpointer (async, closure, trust_closure_free); + task = g_task_new (NULL, cancellable, callback, user_data); + g_task_set_source_tag (task, gcr_trust_is_certificate_anchored_async); - g_simple_async_result_run_in_thread (async, thread_is_certificate_anchored, - G_PRIORITY_DEFAULT, cancellable); + attrs = prepare_is_certificate_anchored (certificate, purpose); + g_return_if_fail (attrs); + g_task_set_task_data (task, attrs, gck_attributes_unref); - g_object_unref (async); + g_task_run_in_thread (task, thread_is_certificate_anchored); + + g_clear_object (&task); } /** @@ -846,17 +810,8 @@ gcr_trust_is_certificate_anchored_async (GcrCertificate *certificate, const gcha gboolean gcr_trust_is_certificate_anchored_finish (GAsyncResult *result, GError **error) { - trust_closure *closure; - - g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE); g_return_val_if_fail (!error || !*error, FALSE); + g_return_val_if_fail (g_task_is_valid (result, NULL), FALSE); - g_return_val_if_fail (g_simple_async_result_is_valid (result, NULL, - gcr_trust_is_certificate_anchored_async), FALSE); - - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) - return FALSE; - - closure = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result)); - return closure->found; + return g_task_propagate_boolean (G_TASK (result), error); } diff --git a/ui/frob-import-button.c b/ui/frob-import-button.c index 7b386a8..d876d81 100644 --- a/ui/frob-import-button.c +++ b/ui/frob-import-button.c @@ -70,14 +70,14 @@ mock_importer_import_async (GcrImporter *importer, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *res; + GTask *task; - res = g_simple_async_result_new (G_OBJECT (importer), callback, user_data, - mock_importer_import_async); + task = g_task_new (importer, cancellable, callback, user_data); + g_task_set_source_tag (task, mock_importer_import_async); g_printerr ("Import %p\n", importer); - g_simple_async_result_complete_in_idle (res); - g_object_unref (res); + g_task_return_boolean (task, TRUE); + g_clear_object (&task); } @@ -86,7 +86,7 @@ mock_importer_import_finish (GcrImporter *importer, GAsyncResult *result, GError **error) { - return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error); + return g_task_propagate_boolean (G_TASK (result), error); } diff --git a/ui/gcr-dialog-util.c b/ui/gcr-dialog-util.c index b37aa63..e9c7fa0 100644 --- a/ui/gcr-dialog-util.c +++ b/ui/gcr-dialog-util.c @@ -27,7 +27,6 @@ typedef struct { GtkDialog *dialog; - gint response_id; gboolean was_modal; gboolean destroyed; gulong response_sig; @@ -49,11 +48,11 @@ dialog_run_closure_free (gpointer data) } static void -complete_async_result (GSimpleAsyncResult *res) +complete_task (GTask *task, int response_id) { - DialogRunClosure *closure = g_simple_async_result_get_op_res_gpointer (res); + DialogRunClosure *closure = g_task_get_task_data (task); - g_object_ref (res); + g_object_ref (task); if (!closure->destroyed) { if (!closure->was_modal) @@ -69,17 +68,17 @@ complete_async_result (GSimpleAsyncResult *res) closure->destroy_sig = 0; } - g_simple_async_result_complete (res); - g_object_unref (res); + g_task_return_int (task, response_id); + g_clear_object (&task); } static void on_dialog_unmap (GtkDialog *dialog, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); + GTask *task = G_TASK (user_data); - complete_async_result (res); + complete_task (task, GTK_RESPONSE_NONE); } static void @@ -87,11 +86,8 @@ on_dialog_response (GtkDialog *dialog, gint response_id, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); - DialogRunClosure *closure = g_simple_async_result_get_op_res_gpointer (res); - - closure->response_id = response_id; - complete_async_result (res); + GTask *task = G_TASK (user_data); + complete_task (task, response_id); } static gint @@ -99,8 +95,8 @@ on_dialog_delete (GtkDialog *dialog, GdkEventAny *event, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); - complete_async_result (res); + GTask *task = G_TASK (user_data); + complete_task (task, GTK_RESPONSE_NONE); return TRUE; /* Do not destroy */ } @@ -108,8 +104,8 @@ static void on_dialog_destroy (GtkDialog *dialog, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); - DialogRunClosure *closure = g_simple_async_result_get_op_res_gpointer (res); + GTask *task = G_TASK (user_data); + DialogRunClosure *closure = g_task_get_task_data (task); /* complete will be called by run_unmap_handler */ closure->destroyed = TRUE; @@ -121,18 +117,17 @@ _gcr_dialog_util_run_async (GtkDialog *dialog, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *res; + GTask *task; DialogRunClosure *closure; g_return_if_fail (GTK_IS_DIALOG (dialog)); g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); - res = g_simple_async_result_new (G_OBJECT (dialog), callback, user_data, - _gcr_dialog_util_run_async); - closure = g_new0 (DialogRunClosure, 1); + task = g_task_new (dialog, cancellable, callback, user_data); + g_task_set_source_tag (task, _gcr_dialog_util_run_async); + closure = g_new0 (DialogRunClosure, 1); closure->dialog = g_object_ref (dialog); - closure->response_id = GTK_RESPONSE_NONE; closure->was_modal = gtk_window_get_modal (GTK_WINDOW (dialog)); if (!closure->was_modal) gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); @@ -140,29 +135,29 @@ _gcr_dialog_util_run_async (GtkDialog *dialog, if (!gtk_widget_get_visible (GTK_WIDGET (dialog))) gtk_widget_show (GTK_WIDGET (dialog)); - g_simple_async_result_set_op_res_gpointer (res, closure, dialog_run_closure_free); + g_task_set_task_data (task, closure, dialog_run_closure_free); closure->response_sig = g_signal_connect_data (dialog, "response", G_CALLBACK (on_dialog_response), - g_object_ref (res), + g_object_ref (task), (GClosureNotify)g_object_unref, 0); closure->unmap_sig = g_signal_connect_data (dialog, "unmap", G_CALLBACK (on_dialog_unmap), - g_object_ref (res), + g_object_ref (task), (GClosureNotify)g_object_unref, 0); closure->delete_sig = g_signal_connect_data (dialog, "delete-event", G_CALLBACK (on_dialog_delete), - g_object_ref (res), + g_object_ref (task), (GClosureNotify)g_object_unref, 0); closure->destroy_sig = g_signal_connect_data (dialog, "destroy", G_CALLBACK (on_dialog_destroy), - g_object_ref (res), + g_object_ref (task), (GClosureNotify)g_object_unref, 0); - g_object_unref (res); + g_clear_object (&task); } @@ -170,11 +165,7 @@ gint _gcr_dialog_util_run_finish (GtkDialog *dialog, GAsyncResult *result) { - DialogRunClosure *closure; - - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (dialog), - _gcr_dialog_util_run_async), GTK_RESPONSE_NONE); + g_return_val_if_fail (g_task_is_valid (result, dialog), GTK_RESPONSE_NONE); - closure = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result)); - return closure->response_id; + return g_task_propagate_int (G_TASK (result), NULL); } diff --git a/ui/gcr-pkcs11-import-interaction.c b/ui/gcr-pkcs11-import-interaction.c index ecdc8f3..bb0dc5d 100644 --- a/ui/gcr-pkcs11-import-interaction.c +++ b/ui/gcr-pkcs11-import-interaction.c @@ -149,19 +149,19 @@ on_dialog_run_async (GObject *source, GAsyncResult *result, gpointer user_data) { - GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); - GckBuilder *builder = g_simple_async_result_get_op_res_gpointer (res); + GTask *task = G_TASK (user_data); + GckBuilder *builder = g_task_get_task_data (task); if (_gcr_pkcs11_import_dialog_run_finish (GCR_PKCS11_IMPORT_DIALOG (source), result)) { _gcr_pkcs11_import_dialog_get_supplements (GCR_PKCS11_IMPORT_DIALOG (source), builder); + g_task_return_boolean (task, TRUE); } else { - g_simple_async_result_set_error (res, G_IO_ERROR, G_IO_ERROR_CANCELLED, - _("The user cancelled the operation")); + g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_CANCELLED, + _("The user cancelled the operation")); } - g_simple_async_result_complete (res); - g_object_unref (res); + g_clear_object (&task); } static void @@ -172,26 +172,27 @@ _gcr_pkcs11_import_interaction_supplement_async (GcrImportInteraction *interacti gpointer user_data) { GcrPkcs11ImportInteraction *self = GCR_PKCS11_IMPORT_INTERACTION (interaction); - GSimpleAsyncResult *res; + GTask *task; g_return_if_fail (self->dialog != NULL); - res = g_simple_async_result_new (G_OBJECT (interaction), callback, user_data, - _gcr_pkcs11_import_interaction_supplement_async); + task = g_task_new (interaction, cancellable, callback, user_data); + g_task_set_source_tag (task, _gcr_pkcs11_import_interaction_supplement_async); /* If dialog was already shown, then short circuit */ if (self->supplemented) { - g_simple_async_result_complete_in_idle (res); + g_task_return_boolean (task, TRUE); } else { self->supplemented = TRUE; - g_simple_async_result_set_op_res_gpointer (res, gck_builder_ref (builder), - (GDestroyNotify)gck_builder_unref); + g_task_set_task_data (task, gck_builder_ref (builder), + (GDestroyNotify) gck_builder_unref); _gcr_pkcs11_import_dialog_run_async (self->dialog, cancellable, - on_dialog_run_async, g_object_ref (res)); + on_dialog_run_async, + g_object_ref (task)); } - g_object_unref (res); + g_clear_object (&task); } static GTlsInteractionResult @@ -202,10 +203,9 @@ _gcr_pkcs11_import_interaction_supplement_finish (GcrImportInteraction *interact GcrPkcs11ImportInteraction *self = GCR_PKCS11_IMPORT_INTERACTION (interaction); g_return_val_if_fail (self->dialog != NULL, G_TLS_INTERACTION_UNHANDLED); - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (interaction), - _gcr_pkcs11_import_interaction_supplement_async), G_TLS_INTERACTION_UNHANDLED); + g_return_val_if_fail (g_task_is_valid (result, interaction), G_TLS_INTERACTION_UNHANDLED); - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) + if (!g_task_propagate_boolean (G_TASK (result), error)) return G_TLS_INTERACTION_FAILED; return G_TLS_INTERACTION_HANDLED; |