[gnome-keyring/dbus-api] [gp11] Support same attrs passed for public/private to generate_key.



commit 875fd4f090398f30159b89a1dbba9eb5114b7606
Author: Stef Walter <stef memberwebs com>
Date:   Fri Dec 11 00:07:19 2009 +0000

    [gp11] Support same attrs passed for public/private to generate_key.
    
    Recognize that the same attribute set could be passed to public
    and private atribute arguments for gp11_session_generate_key_xxx().

 gp11/gp11-session.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)
---
diff --git a/gp11/gp11-session.c b/gp11/gp11-session.c
index 08bc11e..e8bb807 100644
--- a/gp11/gp11-session.c
+++ b/gp11/gp11-session.c
@@ -1114,9 +1114,11 @@ gp11_session_generate_key_pair_full (GP11Session *self, GP11Mechanism *mechanism
 	g_return_val_if_fail (private_key, FALSE);
 
 	_gp11_attributes_lock (public_attrs);
-	_gp11_attributes_lock (private_attrs);
+	if (public_attrs != private_attrs)
+		_gp11_attributes_lock (private_attrs);
 	ret = _gp11_call_sync (self, perform_generate_key_pair, NULL, &args, cancellable, err);
-	_gp11_attributes_unlock (private_attrs);
+	if (public_attrs != private_attrs)
+		_gp11_attributes_unlock (private_attrs);
 	_gp11_attributes_unlock (public_attrs);
 
 	if (!ret)
@@ -1157,7 +1159,8 @@ gp11_session_generate_key_pair_async (GP11Session *self, GP11Mechanism *mechanis
 	args->public_attrs = gp11_attributes_ref (public_attrs);
 	_gp11_attributes_lock (public_attrs);
 	args->private_attrs = gp11_attributes_ref (private_attrs);
-	_gp11_attributes_lock (private_attrs);
+	if (public_attrs != private_attrs)
+		_gp11_attributes_lock (private_attrs);
 	args->mechanism = gp11_mechanism_ref (mechanism);
 
 	_gp11_call_async_ready_go (args, cancellable, callback, user_data);
@@ -1189,7 +1192,8 @@ gp11_session_generate_key_pair_finish (GP11Session *self, GAsyncResult *result,
 
 	args = _gp11_call_arguments (result, GenerateKeyPair);
 	_gp11_attributes_unlock (args->public_attrs);
-	_gp11_attributes_unlock (args->private_attrs);
+	if (args->public_attrs != args->private_attrs)
+		_gp11_attributes_unlock (args->private_attrs);
 
 	if (!_gp11_call_basic_finish (result, err))
 		return FALSE;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]