]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
try to restart on session errors, to avoid having a failed call.
authorNikos Mavrogiannopoulos <nmav@redhat.com>
Thu, 3 Jul 2014 16:07:29 +0000 (18:07 +0200)
committerNikos Mavrogiannopoulos <nmav@redhat.com>
Thu, 3 Jul 2014 16:08:24 +0000 (18:08 +0200)
lib/pkcs11_privkey.c

index 7ba4d287ae84201f574c53a466ced8ba1fe6ac1e..e6c3ff3358d70aa1f946aac9220bdea428a558cb 100644 (file)
@@ -43,7 +43,8 @@
                if (rv == CKR_SESSION_HANDLE_INVALID && sinfo == &key->sinfo) { \
                        if (key->sinfo.init != 0) { \
                                pkcs11_close_session(&key->sinfo); \
-                               memset(&key->sinfo, 0, sizeof(key->sinfo)); \
+                               key->sinfo.init = 0; \
+                               goto restart; \
                        } \
                }
 
@@ -237,6 +238,7 @@ _gnutls_pkcs11_privkey_sign_hash(gnutls_pkcs11_privkey_t key,
 
        PKCS11_CHECK_INIT_PRIVKEY(key);
 
+ restart:
        if (key->sinfo.init != 0) {
                sinfo = &key->sinfo;
                obj = key->obj;
@@ -347,6 +349,7 @@ int gnutls_pkcs11_privkey_status(gnutls_pkcs11_privkey_t key)
        
        PKCS11_CHECK_INIT_PRIVKEY(key);
 
+ restart:
        if (key->sinfo.init != 0) {
                sinfo = &key->sinfo;
                obj = key->obj;
@@ -490,6 +493,7 @@ _gnutls_pkcs11_privkey_decrypt_data(gnutls_pkcs11_privkey_t key,
 
        PKCS11_CHECK_INIT_PRIVKEY(key);
 
+ restart:
        if (key->sinfo.init != 0) {
                sinfo = &key->sinfo;
                obj = key->obj;