diff options
author | Stef Walter <stefw@collabora.co.uk> | 2011-11-14 11:26:37 +0100 |
---|---|---|
committer | Stef Walter <stefw@collabora.co.uk> | 2011-11-14 11:26:37 +0100 |
commit | d9b98a02bb228552244096e8ce78b2b8ebbdc202 (patch) | |
tree | 7234523990a0d9e0ec3e44e7a28f58b2c379a954 /gck | |
parent | 6ec1c6ae545bdc99b821063456a111257b8110c1 (diff) | |
download | gcr-d9b98a02bb228552244096e8ce78b2b8ebbdc202.tar.gz gcr-d9b98a02bb228552244096e8ce78b2b8ebbdc202.tar.bz2 gcr-d9b98a02bb228552244096e8ce78b2b8ebbdc202.zip |
gck: Fix regression in gck_slot_open_session_finish
* The first argument is a slot, but we directly called
g_async_initable_new_async, and therefore a GckSession
was erroneously expected.
Diffstat (limited to 'gck')
-rw-r--r-- | gck/gck-slot.c | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/gck/gck-slot.c b/gck/gck-slot.c index 49f0f3b..c26ed02 100644 --- a/gck/gck-slot.c +++ b/gck/gck-slot.c @@ -1018,6 +1018,23 @@ gck_slot_open_session_async (GckSlot *self, gck_slot_open_session_full_async (self, options, 0UL, NULL, NULL, cancellable, callback, user_data); } +static void +on_open_session_complete (GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data); + GError *error = NULL; + + if (g_async_initable_new_finish (G_ASYNC_INITABLE (source), result, &error)) + g_simple_async_result_set_op_res_gpointer (res, g_object_ref (source), g_object_unref); + else + g_simple_async_result_take_error (res, error); + + g_simple_async_result_complete (res); + g_object_unref (res); +} + /** * gck_slot_open_session_full_async: (skip) * @self: The slot to open a session on. @@ -1044,8 +1061,14 @@ gck_slot_open_session_full_async (GckSlot *self, GAsyncReadyCallback callback, gpointer user_data) { + GSimpleAsyncResult *res; + + res = g_simple_async_result_new (G_OBJECT (self), callback, user_data, + gck_slot_open_session_full_async); + g_async_initable_new_async (GCK_TYPE_SESSION, G_PRIORITY_DEFAULT, - cancellable, callback, user_data, + cancellable, on_open_session_complete, + g_object_ref (res), "options", options, "slot", self, "opening-flags", pkcs11_flags, @@ -1065,9 +1088,20 @@ gck_slot_open_session_full_async (GckSlot *self, * Returns: (transfer full): the new session or %NULL if an error occurs */ GckSession * -gck_slot_open_session_finish (GckSlot *self, GAsyncResult *result, GError **err) +gck_slot_open_session_finish (GckSlot *self, GAsyncResult *result, GError **error) { - return gck_session_open_finish (result, err); + 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; + + return g_object_ref (g_simple_async_result_get_op_res_gpointer (res)); } /** |