summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStef Walter <stefw@collabora.co.uk>2011-11-14 11:26:37 +0100
committerStef Walter <stefw@collabora.co.uk>2011-11-14 11:26:37 +0100
commitd9b98a02bb228552244096e8ce78b2b8ebbdc202 (patch)
tree7234523990a0d9e0ec3e44e7a28f58b2c379a954
parent6ec1c6ae545bdc99b821063456a111257b8110c1 (diff)
downloadgcr-d9b98a02bb228552244096e8ce78b2b8ebbdc202.tar.gz
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.
-rw-r--r--gck/gck-slot.c40
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));
}
/**